选中另一个时,禁用两个QPushButton

时间:2015-06-23 06:01:29

标签: python qt pyqt

我的程序中有3个QpushButton(x,y,z)。我必须将2个按钮(y,z)设置为禁用,而另一个QpushButton(x)处于可检查模式。 当X处于可检查模式时,其他应该被禁用。 我怎样才能做到这一点? 提前谢谢..

我的代码:

    self.btn_mpgX.setCheckable(True)
    self.btn_mpgY.setEnabled(False);
    self.btn_mpgZ.setEnabled(False);
    self.btn_mpgX.toggled.connect(self.btn_mpgXuncheckable)

def btn_mpgXuncheckable(self):
    self.btn_mpgY.setEnabled(True);
    self.btn_mpgZ.setEnabled(True);
    self.btn_mpgX.toggled.connect(self.initUI) 

1 个答案:

答案 0 :(得分:0)

预期行为:一个可检查QPushButton(X),在选中/取消选中时禁用/启用两个常规QPushButton(Y和Z)(如果我错了,请更正我)

与示例代码一样,您可以使用信号toggled(bool checked)。布尔值允许您知道按钮是已选中还是未选中,您可以相应地启用/禁用其他按钮。

import sys
import PyQt4.QtCore as QtCore
import PyQt4.QtGui as QtGui

class MyWidget(QtGui.QWidget):
    def __init__(self, parent=None):
        super(MyWidget, self).__init__(parent)

        self.buttonX=QtGui.QPushButton("X")
        self.buttonY=QtGui.QPushButton("Y")
        self.buttonZ=QtGui.QPushButton("Z")

        self.buttonX.setCheckable(True)
        self.buttonX.toggled.connect(self.on_check_X)

        #layout
        hbox=QtGui.QHBoxLayout()
        hbox.addWidget(self.buttonX)
        hbox.addWidget(self.buttonY)
        hbox.addWidget(self.buttonZ)
        self.setLayout(hbox)

    def on_check_X(self,is_toggle):
        if is_toggle:
            self.buttonY.setEnabled(False)
            self.buttonZ.setEnabled(False)
        else:
            self.buttonY.setEnabled(True)
            self.buttonZ.setEnabled(True)

if __name__ == "__main__":  
    app = QtGui.QApplication(sys.argv)
    win= MyWidget()
    win.show()    
    sys.exit(app.exec_())