使用pyqt中的复选框

Map*_*ine 4 python checkbox pyqt

1)我的UI中有一个名为"ch_check"的复选框,用Qt设计器创建,需要进行测试

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

self.dlg.bt_button.clicked.connect(self.doCheck)
Run Code Online (Sandbox Code Playgroud)

3)功能:

def doCheck(self):
    if ch_check.isChecked():
        self.dlg.le_text.setText("Hello")
    else:
        self.dlg.le_text.setText("Nope")
Run Code Online (Sandbox Code Playgroud)

但是,我无法弄清楚如何正确引用该框.我该怎么办?我是否需要先以某种方式连接复选框?到目前为止,我发现的所有示例都使用复选框来触发函数和诸如此类的东西,同时完全忽略了这个基本用法.我发现了这个问题,但它没有回答如何解决现有的复选框:如何检查是否在pyqt中选中了复选框

And*_*ndy 10

您可以使用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_())
Run Code Online (Sandbox Code Playgroud)

说明:

我们用这条线设置信号:

self.ui.ch_check.stateChanged.connect(self.state_changed)
Run Code Online (Sandbox Code Playgroud)

当复选框的状态发生变化时,它将调用该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!")
Run Code Online (Sandbox Code Playgroud)

在函数中,我们确定是否已选中复选框.如果是这样,我们将标签更改为"已检查",如果未选中,则标签将更改为"未检查".


例:

启动应用程序时,UI如下所示:

新开的应用程序

选中此框,更改标签:

选中复选框

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

未选中的复选框


Map*_*ine 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")
Run Code Online (Sandbox Code Playgroud)