2016-07-08 5 views
0

Ich benutze PyQT4, um eine GUI zu erstellen. Ich habe eine Taste, die mit einer def verbinden muss, wenn eine bestimmte Bedingung erfüllt ist. Wenn diese Bedingung nicht erfüllt ist, sollte die Schaltfläche eine Verbindung zu einem anderen def herstellen. Bisher ist dies, was ich habe -Eine Schaltfläche, die mit zwei verschiedenen Ereignismethoden in PyQT verbunden ist

if self.txtAgilent.text() and self.txtBattery.text(): 
     self.connect(self.buttonPlot, SIGNAL('clicked()'), self.plotButtonClicked) 
    else: 
     self.connect(self.buttonPlot, SIGNAL('clicked()'), self.fileErrorMsgBox) 

Wie oben, wenn die erste Bedingung erfüllt ist (das heißt, wenn zwei Dateien ausgewählt werden), eine grafische Darstellung erstellt. Wenn nicht, erscheint eine Fehlermeldung. Das Problem ist, dass immer wenn ich die Plot-Schaltfläche in meiner GUI drücke, nur die Fehlermeldung erscheint, obwohl ich zwei Dateien erfolgreich ausgewählt habe.

Die Message-Box-Funktion ist wie folgt:

def fileErrorMsgBox(self): 
    w = QWidget() 
    msg = QMessageBox.warning(w, "WARNING", "File(s) not chosen! Please choose a file.") 

Wie löse ich dieses Problem?

+0

was genau meinen Sie ausgewählt, Alles, was ich sehen kann, ist, dass Sie versuchen, den Wert von zwei Textfeldern zu erhalten, indem Sie '.text()' – danidee

+0

@danidee aufrufen. Ich denke, das OP bedeutet, dass der Benutzer die zwei Textfelder füllen muss, indem er Dateien auswählt (d. H. Auswählt). – ekhumoro

Antwort

1

Der beste Ansatz besteht darin, nicht zu versuchen, die Methode zu ändern, an die die Schaltfläche angeschlossen ist. Stattdessen, halten Sie die Schaltfläche mit der gleichen Methode verbunden, und innerhalb diese Methode, führt die Prüfung (ob Dinge ausgewählt oder entsprechenden Text ist in Textfelder, was auch immer Ihre Anwendungsfall).

So zum Beispiel so etwas wie:

def __init__(self): 
    self.connect(self.buttonPlot, SIGNAL('clicked()'), self.plotButtonClicked) 

def plotButtonClicked(self): 
    if self.txtAgilent.text() and self.txtBattery.text(): 
     # do what plotButtonClicked did before 
    else: 
     # create and show the error message box 

Hinweis, sollten Sie wirklich die new style signals/slot API in PyQt verwenden, die Verbindungen wie folgt ausführt:

self.buttonPlot.clicked.connect(self.plotButtonClicked)