2009-08-28 2 views
3

Я пытаюсь разработать приложение с очень модульным подходом к командам и подумал, что было бы хорошо, если бы я использовал pyqt, чтобы использовать QAction для привязки ярлыков к команды.
Однако, кажется, что ярлыки действий срабатывают только тогда, когда действие отображается в меню или на панели инструментов. Кто-нибудь знает способ заставить это действие работать без его видимости?
Ниже приведен пример кода, который показывает, что я пытаюсь.
Спасибо,Использовать 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_() 

ответ

6

Вы должны добавить свое действие на виджет, прежде чем он будет обработан. Из документации QT для QAction:

Действия добавляются виджеты, используя QWidget :: AddAction() или QGraphicsWidget :: AddAction(). Примечание , что действие должно быть добавлено в виджет , прежде чем его можно будет использовать; это также верно, когда ярлык должен быть глобальным (т. е. Qt :: ApplicationShortcut как Qt :: ShortcutContext).

Это не означает, что они будут видны как элемент меню или что-то еще - только они будут процессами как часть цикла событий виджетов.

+0

Что-то, что только что меня укусило: недостаточно создать QAction с QWidget как его родителем - вам также нужно называть 'addAction()' на нем. –

Смежные вопросы