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 に答える