QCheckBox
import sys from PyQt4 import QtGui, QtCore class Example(QtGui.QWidget): def __init__(self): super(Example, self).__init__() self.cb = QtGui.QCheckBox('&Show title', self) self.cb.move(20, 20) # 状態を3つに増やす self.cb.setTristate() # self.cb.stateChanged.connect(self.changeTitle) # Qt::CheckState列挙型に準拠 names = ['Unchecked', 'PartiallyChecked', 'Checked'] for i, v in enumerate(names): button = QtGui.QPushButton(v, self) button.move(120, 20 + 30 * i) button.clicked.connect(self.changeState) button.setWhatsThis( str( i ) ) self.preSender = button # テンポラリオブジェクト self.setGeometry(300, 300, 250, 150) self.setWindowTitle('QtGui.QCheckBox') self.show() def changeTitle(self, state): self.sender().checkState() # 第二引数のstateと同値 if state == QtCore.Qt.Checked: self.setWindowTitle('QtCore.Qt.Checked') elif state == QtCore.Qt.PartiallyChecked: self.setWindowTitle('QtCore.Qt.PartiallyChecked') elif state == QtCore.Qt.Unchecked: self.setWindowTitle('QtCore.Qt.Unchecked') def changeState(self): self.preSender.setEnabled(True) self.preSender = sender = self.sender() # 選択したものを無効にする sender.setEnabled(False) # ステートを設定 self.cb.setCheckState( int( sender.whatsThis() ) ) def main(): app = QtGui.QApplication(sys.argv) ex = Example() sys.exit(app.exec_()) if __name__ == '__main__': main()
whatsThisってメソッド名まんまで面白いですね。
idなど振りたいときはあと、QObject::setObjectNameなど文字列で判別名与える感じなんでしょうか。