2

Python 3.2x と PyQT 4.8x を使用:

アクションを初期化し、メニュー項目に割り当てました。

self.__actionOpen = QtGui.QAction(self.__mw)
self.__actionOpen.setObjectName("actionOpen")
self.__actionOpen.setText("OpenFile")
QtCore.QObject.connect(self.__actionOpen, QtCore.SIGNAL("triggered()"), self.__accessFile)
self.__menuFile.addAction(self.__actionOpen)

正常に動作します - メニュー項目に「OpenFile」というキャプションがあり、アクション シグナル/スロットが呼び出されます。

QPushButton で試してみました - 同じ QAction オブジェクト:

self.__buttonFile.addAction(self.__actionOpen)

なし: ボタンにキャプションがなく、クリックしても何も起こりません。

アクションは QButton で機能しませんか (addAction 呼び出しは文句を言いませんでした...)? または、私のコードに何か問題がありますか? おそらく、「triggered()」シグナルは、QPushButton と対話するアクションには適していませんか?

4

4 に答える 4

9

QActionaを aに好きなように割り当てることはできませQPushButtonん。QPushButtonは再定義されないaddActionためQWidget.addAction、ボタンのコンテキスト メニューにアクションを追加する動作が発生します。

ただし、ボタンのキャプションを変更し、クリック時にアクションをトリガーする にQToolButtonアクションを割り当てることができます。setDefaultAction

または、アクション (キャプション、ツールチップ...) に従ってボタン内のすべてを変更し、関連するボタンのシグナルをアクションのスロットに接続するメソッドをサブクラスQPushButton化して追加することにより、とにかく手動で行うことができます。setDefaultAction

于 2013-05-22T23:40:48.963 に答える
2

他の回答で指摘されているように、アクションを追加しても、ボタンがクリックされたときにアクションが「実行」されません。これは設計によるものです。QAction の動作を再利用または参照したい場合は、 のclicked()シグナルを の に接続QPushButtonするだけです。trigger()QAction

QtCore.QObject.connect(self.__menuFile,
                       QtCore.SIGNAL("clicked()"),
                       self.__actionOpen.trigger)

そうすれば、ボタンがクリックself.__actionOpenされるたびにアクションがトリガーされます。self.menuFile

于 2016-11-14T22:05:59.577 に答える