【问题标题】:Python3 PyQt4 Creating a simple QCheckBox and changing a Boolean variablePython3 PyQt4 创建一个简单的 QCheckBox 并更改一个布尔变量
【发布时间】:2012-10-04 22:14:11
【问题描述】:

所以我一直在尝试使用 Python 3.3 和 PyQt4 编写 GUI。我已经完成了一些教程,但我仍然无法弄清楚如何在全局变量中检查和取消选中触发器更改。我无法让它触发任何事情,因为所有教程都使用了对我不起作用的方法。

程序太大了,这里无法整体复制,所以我把程序的基本结构放在了 Checkboxes 周围

import sys
from PyQt4 import QtGui, QtCore

ILCheck = False

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

        ILCheckbox = QtGui.QCheckBox(self)
        ILCheckbox.setCheckState(QtCore.Qt.Unchecked)

        MainLayout = QtGui.QGridLayout()
        MainLayout.addWidget(ILCheckbox, 0, 0, 1, 1)
        self.setLayout(MainLayout)

这就是我卡住的地方。我想要做的是,如果 ILCheckbox 被选中,则将 ILCheck 的状态更改为 True,并在其未选中时将其更改回 False。几乎一整天都在做这件事,但没有一个教程有太大帮助。

【问题讨论】:

    标签: eclipse python-3.x pyqt4 windows-7-x64 qcheckbox


    【解决方案1】:

    复选框在其状态更改时会发出stateChanged 事件(真的!)。将其连接到事件处理程序:

    import sys
    
    from PyQt4.QtGui import *
    from PyQt4.QtCore import *
    
    class SelectionWindow(QMainWindow):
        def __init__(self, parent=None):
            super().__init__(parent)
    
            self.ILCheck = False
    
            ILCheckbox = QCheckBox(self)
            ILCheckbox.setCheckState(Qt.Unchecked)
    
            ILCheckbox.stateChanged.connect(self.ILCheckbox_changed)
    
            MainLayout = QGridLayout()
            MainLayout.addWidget(ILCheckbox, 0, 0, 1, 1)
    
            self.setLayout(MainLayout)
    
        def ILCheckbox_changed(self, state):
            self.ILCheck = (state == Qt.Checked)
    
            print(self.ILCheck)
    
    
    if __name__ == '__main__':
      app = QApplication(sys.argv)
      window = SelectionWindow()
    
      window.show()
      sys.exit(app.exec_())
    

    【讨论】:

    • 谢谢。不过这很奇怪,因为 eclipse 在 stateChanged 之后没有给我 .connect 的选项。它有效,我只是觉得有点奇怪。
    【解决方案2】:

    尽量避免使用全局变量。

    相反,将复选框设为窗口的属性并直接测试其状态:

    class SelectionWindow(QtGui.QWidget):
        def __init__(self, parent=None):
            super(SelectionWindow, self).__init__(parent)
            self.ILCheckbox = QtGui.QCheckBox(self)
            self.ILCheckbox.setChecked(QtCore.Qt.Unchecked)
            MainLayout = QtGui.QGridLayout()
            MainLayout.addWidget(self.ILCheckbox, 0, 0, 1, 1)
            self.setLayout(MainLayout)
    ...
    
    window = SelectionWindow()
    print window.ILCheckbox.isChecked()
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-01-16
      • 2020-01-18
      • 1970-01-01
      • 2012-04-30
      • 1970-01-01
      • 2022-07-11
      • 2021-04-07
      • 1970-01-01
      相关资源
      最近更新 更多