2

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

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

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。几乎一整天都在做这件事,没有一个教程有太大帮助。

4

2 回答 2

4

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_())
于 2012-10-04T22:24:43.870 回答
0

尽量避免使用全局变量。

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

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()
于 2012-10-04T22:48:12.640 回答