1

次のスレッドに触発されました: PyQt: How to set Combobox Items be Checkable?
QToolButton を使用し、addAction を使用してチェック可能な項目を追加することで、単純なチェック可能な「コンボボックス」を作成できました。簡単なコード例を参照してください:

from PyQt4 import QtCore, QtGui
import sys
class Ui_Dialog(object):
   def setupUi(self, Dialog):
       Dialog.setObjectName("Dialog")
       Dialog.resize(198, 157)
       self.toolButton = QtGui.QToolButton(Dialog)
       self.toolButton.setGeometry(QtCore.QRect(60, 50, 71, 19))
       self.toolButton.setObjectName("toolButton")
       self.toolButton.setText("MyButton")
       QtCore.QMetaObject.connectSlotsByName(Dialog)

class MyDialog(QtGui.QDialog):
    def __init__(self, parent=None):
        QtGui.QWidget.__init__(self, parent)
        self.ui = Ui_Dialog()
        self.ui.setupUi(self)
        self.toolMenu = QtGui.QMenu(self.ui.toolButton)
        for i in range(3):
            action = self.toolMenu.addAction("Category " + str(i))
            action.setCheckable(True)
        self.ui.toolButton.setMenu(self.toolMenu)
        self.ui.toolButton.setPopupMode(QtGui.QToolButton.InstantPopup)

if __name__ == "__main__":
    app = QtGui.QApplication(sys.argv)
    myapp = MyDialog()
    myapp.show()
    sys.exit(app.exec_())  

しかし、ダイアログでチェックされた QToolButton アクション (つまり、カテゴリ 1および/またはカテゴリ 2/3 ) をどのようにキャプチャできますか?

4

2 に答える 2

1

QActionGroupまたは、すべての を収集するように定義してから、コールバック メソッドへのシグナルをaction次のように定義することもできます。connecttriggered

class MyDialog(QtGui.QDialog):
    def __init__(self, parent=None):
        QtGui.QWidget.__init__(self, parent)
        self.ui = Ui_Dialog()
        self.ui.setupUi(self)
        self.toolMenu = QtGui.QMenu(self.ui.toolButton)
        group = QtGui.QActionGroup(self.toolMenu)
        for i in range(3):
            action = self.toolMenu.addAction("Category %d" % i)
            action.setCheckable(True)
            action.setActionGroup(group)
            action.setData(i)
        self.ui.toolButton.setMenu(self.toolMenu)
        self.ui.toolButton.setPopupMode(QtGui.QToolButton.InstantPopup)
        group.triggered.connect(self.test)

    def test(self, act):
        print 'Action' , act.data().toInt()[0]

ここでメソッドでは、それぞれの戻り値test()を読み取ると、タプルを返すメソッドを使用するように変換する必要があります。dataactionQVariantinttoInt(int, bool)[0]

于 2015-12-10T15:09:02.310 に答える