4

コマンドへの非常にモジュール化されたアプローチでアプリケーションを開発しようとしていますが、pyqtを使用しているので、QActionを使用してショートカットをコマンドにバインドするといいと思いました。
ただし、アクションのショートカットは、アクションがメニューまたはツールバーに表示されている場合にのみ機能するようです。このアクションを表示せずに機能させる方法を知っている人はいますか?
私がしようとしていることを示すいくつかのサンプルコードの下。
ありがとう、

アンドレ

from PyQt4 import *
from PyQt4.QtCore import *
from PyQt4.QtGui import *
import sys

class TesteMW(QMainWindow):
    def __init__(self, *args):
        QMainWindow.__init__(self, *args)
        self.create_action()

    def create_action(self):
        self.na = QAction(self)
        self.na.setText('Teste')
        self.na.setShortcut('Ctrl+W')
        self.connect(self.na, SIGNAL('triggered()'), self.action_callback)
        # uncomment the next line for the action to work
        # self.menuBar().addMenu("Teste").addAction(self.na)

    def action_callback(self):
        print 'action called!'


app = QApplication(sys.argv)
mw = TesteMW()
mw.show()

app.exec_()
4

1 に答える 1

7

アクションを処理する前に、アクションをウィジェットに追加する必要があります。QAction の QT ドキュメントから:

アクションは、QWidget::addAction() または QGraphicsWidget::addAction() を使用してウィジェットに追加されます。アクションは、使用する前にウィジェットに追加する必要があることに注意してください。これは、ショートカットがグローバルである必要がある場合にも当てはまります (つまり、Qt::ApplicationShortcut を Qt::ShortcutContext として)。

これは、それらがメニュー項目などとして表示されることを意味するのではなく、ウィジェット イベント ループの一部として処理されることを意味します。

于 2009-08-28T13:49:27.593 に答える