2016-07-05 9 views
0

gedrückt wird Die Schaltfläche im folgenden Skript soll nach dem Drücken einer Nachricht eine Nachricht öffnen. Aber bevor die Schaltfläche gedrückt wird, öffnet das Skript bereits zwei Meldungsfelder.PyQT Skript zweimal ausführen, bevor Taste

Ich habe versucht, dies mit dem Selbst-Argument zu beheben, aber das Skript öffnet entweder zwei oder keine Boxen. Jede Hilfe würde sehr geschätzt werden.

import sys 
import subprocess 
from PyQt4 import QtCore, QtGui 

class MainWindow(QtGui.QMainWindow): 

    def __init__(self, parent=None): 

     super(MainWindow, self).__init__(parent) 

     self.win_widget = WinWidget(self) 
     widget = QtGui.QWidget() 
     layout = QtGui.QVBoxLayout(widget) 
     layout.addWidget(self.win_widget) 
     self.setCentralWidget(widget) 


     self.statusBar().showMessage('Ready') 

     self.setGeometry(300, 300, 450, 250) 
     self.setWindowTitle('Test') 
     self.setWindowIcon (QtGui.QIcon('logo.png')) 
     self.show() 

     self.win_widget = WinWidget (self) 


class WinWidget (QtGui.QWidget) : 

    def __init__(self, parent): 
     super (WinWidget , self).__init__(parent) 
     self.controls() 
     self.grid_layout() 
     self.showDialog() 

    def controls(self): 

     self.btn_file = QtGui.QPushButton('Choose Path ', self) 
     self.btn_file.setFont(QtGui.QFont('CourierNew', 12 , QtGui.QFont.Bold,False)) 
     self.btn_file.clicked.connect(self.showDialog) 

     self.le_path = QtGui.QLineEdit("Python" ,self) 
     self.le_path.setFont(QtGui.QFont('CourierNew' , 11)) 


    def grid_layout (self) : 
     grid = QtGui.QGridLayout() 
     grid.setSpacing(2) 
     grid.addWidget(self.btn_file , 1 , 0) 
     grid.addWidget(self.le_path , 1, 1) 
     self.setLayout(grid) 

    # THE PART BELOW IS THE ONE THAT OPENS THE TWO BOXES BEFORE BUTTON IS PRESSED ... 
    def showDialog (self) : 
     self.msg = QtGui.QMessageBox(self) 
     self.msg.setText("This is a message box") 
     self.msg.setInformativeText("This is additional information") 
     self.msg.setWindowTitle("MessageBox demo") 
     self.msg.setDetailedText("The details are as follows:") 
     self.msg.show() 


def main(): 

    app = QtGui.QApplication(sys.argv) 
    win = MainWindow() 
    win.show() 
    sys.exit(app.exec_()) 

if __name__ == '__main__': 
    main() 
+1

Sie rufen 'showDialog' in Ihrem Konstruktor –

+0

Vielen Dank, das perfekt funktioniert gut. Niemals hätte ich das selbst herausgefunden ... sehr appreciated. – rainer

Antwort

0
#try with this code. I did some changes. 
#If your are not expecting this answer, sorry. 

import sys 
import subprocess 
from PyQt4 import QtCore, QtGui 

class MainWindow(QtGui.QMainWindow): 

    def __init__(self, parent=None): 

     super(MainWindow, self).__init__(parent) 

     self.win_widget = WinWidget(self) 
     widget = QtGui.QWidget() 
     layout = QtGui.QVBoxLayout(widget) 
     layout.addWidget(self.win_widget) 
     self.setCentralWidget(widget) 

     self.statusBar().showMessage('Ready') 

     self.setGeometry(300, 300, 450, 250) 
     self.setWindowTitle('Test') 
     self.setWindowIcon (QtGui.QIcon('logo.png')) 
     #self.show() 



class WinWidget (QtGui.QWidget) : 

    def __init__(self, parent): 
     super (WinWidget , self).__init__(parent) 
     self.controls() 
     self.grid_layout() 
     self.showDialog() 

    def controls(self): 

     self.btn_file = QtGui.QPushButton('Choose Path ', self) 
     self.btn_file.setFont(QtGui.QFont('CourierNew', 12 , QtGui.QFont.Bold,False)) 
     self.btn_file.clicked.connect(self.showDialog) 

     self.le_path = QtGui.QLineEdit("Python" ,self) 
     self.le_path.setFont(QtGui.QFont('CourierNew' , 11)) 


    def grid_layout (self) : 
     grid = QtGui.QGridLayout() 
     grid.setSpacing(2) 
     grid.addWidget(self.btn_file , 1 , 0) 
     grid.addWidget(self.le_path , 1, 1) 
     self.setLayout(grid) 

    # THE PART BELOW IS THE ONE THAT OPENS THE TWO BOXES BEFORE BUTTON IS PRESSED ... 
    def showDialog (self) : 
     self.msg = QtGui.QMessageBox(self) 
     self.msg.setText("This is a message box") 
     self.msg.setInformativeText("This is additional information") 
     self.msg.setWindowTitle("MessageBox demo") 
     self.msg.setDetailedText("The details are as follows:") 
     #self.msg.show() 
     self.msg.exec_() 

def main(): 

    app = QtGui.QApplication(sys.argv) 
    win = MainWindow() 
    win.show() 
    sys.exit(app.exec_()) 

if __name__ == '__main__': 
    main() 

#Thanks, 
#Subin Gopi