在 pyqt 中使用复选框
Using a checkbox in pyqt
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
您可以使用 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"。
示例:
当应用程序启动时,UI 看起来像这样:
选中复选框,更改标签:
取消选中复选框,同时更改标签:
如上评论所述,我只是犯了一个小错误。正确的代码是:
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")
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
您可以使用 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"。
示例:
当应用程序启动时,UI 看起来像这样:
选中复选框,更改标签:
取消选中复选框,同时更改标签:
如上评论所述,我只是犯了一个小错误。正确的代码是:
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")