一个按钮连接到PyQT中的两个不同的事件方法

时间:2016-07-08 18:19:58

标签: pyqt

我使用PyQT4创建GUI。我有一个按钮,当满足某个条件时,需要与一个def连接。如果不满足此条件,则该按钮应连接到另一个def。到目前为止,这就是我所拥有的 -

    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)

如上所述,如果满足第一个条件(即,如果选择了两个文件),则创建一个图。如果没有,则弹出错误消息框。现在的问题是,每当我点击GUI上的绘图按钮时,即使我成功选择了两个文件,也只会弹出错误消息框。

消息框功能如下:

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

如何解决此问题?

1 个答案:

答案 0 :(得分:1)

最好的方法是不要尝试更改按钮所连接的方法。相反,保持按钮连接到相同的方法,那个方法中,执行检查(无论选择的是什么或适当的文本都在文本框中,无论您的用例如何)。

所以,例如,像:

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

注意,你应该在PyQt中使用new style signals/slot API来执行这样的连接:

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