【问题标题】:Using a checkbox in pyqt在 pyqt 中使用复选框
【发布时间】:2015-08-08 08:03:26
【问题描述】:

1) 我在使用 Qt 设计器创建的 UI 中有一个名为“ch_check”的复选框,需要测试

2)还有一个按钮,“bt_button”,触发一个简单的功能:

self.dlg.bt_button.clicked.connect(self.doCheck)

3) 功能:

def doCheck(self):
    if ch_check.isChecked():
        self.dlg.le_text.setText("Hello")
    else:
        self.dlg.le_text.setText("Nope")

但是我不知道如何正确引用该框。我该怎么做?我需要先以某种方式连接复选框吗?到目前为止,我发现的所有示例都使用复选框来触发功能等,而完全忽略了这种基本用法。我发现了这个问题,但它没有回答如何解决现有的复选框:How to check if a checkbox is checked in pyqt

【问题讨论】:

    标签: python checkbox pyqt


    【解决方案1】:

    您可以使用StateChanged 信号来执行此操作。对于这个例子,我们有一个简单的.ui 和一个简单的.py 文件:

    .ui 文件定义了两个小部件。一个复选框 (ch_check) 和一个 QLabel (my_label)

    python 文件:

    from PyQt4 import QtCore
    from PyQt4 import QtGui 
    import sys
    from test_ui import Ui_MainWindow
    
    class CheckDialog(QtGui.QMainWindow):
        def __init__(self):
            QtGui.QWidget.__init__(self)
    
            # Set up the user interface from Designer.
            self.ui = Ui_MainWindow()
            self.ui.setupUi(self)
            self.ui.ch_check.stateChanged.connect(self.state_changed)
    
        def state_changed(self, int):
            if self.ui.ch_check.isChecked():
                self.ui.my_label.setText("CHECKED!")
            else:
                self.ui.my_label.setText("UNCHECKED!")
    
    
    if __name__ == '__main__':
        app = QtGui.QApplication(sys.argv)
        window = CheckDialog()
        window.show()
        sys.exit(app.exec_())
    

    解释:

    我们用这条线设置我们的信号:

    self.ui.ch_check.stateChanged.connect(self.state_changed)
    

    当复选框的状态发生变化时,会调用state_changed函数。这是您检查框是选中还是未选中的逻辑所在。

    def state_changed(self, int):
        if self.ui.ch_check.isChecked():
            self.ui.my_label.setText("CHECKED!")
        else:
            self.ui.my_label.setText("UNCHECKED!")
    

    在函数中,我们判断复选框是否被选中。如果是这样,我们将标签更改为“CHECKED”,如果未选中,则标签更改为“UNCHECKED”。


    例子:

    应用程序启动后,用户界面如下所示:

    选中复选框,更改标签:

    取消选中该框,也会更改标签:

    【讨论】:

    • 这正是我不想做的。我只想检查复选框状态。没有其他的。希望更新了问题以更清晰。
    • 在函数中使用if语句有什么问题?我不明白你编辑的问题。
    • 你的答案很好,但不是我想要的。我的问题要简单得多。我想我让它听起来过于复杂,我只需要将 self.dlg. 添加到我的 if.. d'oh!
    • 我很难理解int 参数在def state_changed(self, int): 中的形成位置,我们没有将任何内容传递给self.state_changed,那么为什么int 应该作为参数存在?
    • @Sherafati int 是必需的,因为复选框的信号 stateChanged 发出一个 int。处理信号的方法需要接受这个参数。详情见doc.qt.io...
    【解决方案2】:

    正如上面评论中提到的,我只是犯了一个小错误。正确的代码是:

    def doCheck(self):
        checker = self.dlg.ch_check
        if self.dlg.ch_check.isChecked():
            self.dlg.le_text.setText("Hello")
        else:
            self.dlg.le_text.setText("Nope")
    

    【讨论】:

      猜你喜欢
      • 2011-07-10
      • 2023-04-01
      • 1970-01-01
      • 1970-01-01
      • 2011-09-10
      • 2013-07-18
      • 2018-12-06
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多