2016-04-27 2 views
1

В Windows есть несколько ключевых привязок для стандартных действий. Например, до копия, можно использовать Ctrl + C или Ctrl + Insert.QAction keyBindings

Как обращаться с Qt? Это то, что я сделал:

  1. Я получил список привязок клавиш с QKeySequence.keyBindings().
  2. Я создал 2 действия, один для Ctrl + C, другой для Ctrl + Insert.

Кажется, что сработало.

Вопрос: Правильно ли он обрабатывает привязки клавиш с помощью Qt?

исходный код Full:

from sys import argv, exit 
from PyQt4.QtGui import QApplication, QWidget, QAction, QKeySequence 


class Widget(QWidget): 
    def __init__(self): 
     QWidget.__init__(self) 
     for key in QKeySequence.keyBindings(QKeySequence.Copy): 
      action = QAction("Copy", self) 
      action.triggered.connect(self._copy) 
      action.setShortcut(key) 
      self.addAction(action) 

    def _copy(self): 
     print("Copy!") 

print("On Windows, use Ctrl+C or Ctrl+Insert to copy.") 
app = QApplication(argv) 
w = Widget() 
w.show() 
exit(app.exec_()) 

ответ

3

Вам нужно только одно действие и вызов QAction::setShortcuts().

action = QAction("Copy", self) 
action.setShortcuts(QKeySequence.keyBindings(QKeySequence.Copy)) 
action.triggered.connect(self._copy) 
+0

Спасибо! Я не знал setShortcuts(). Однако, что касается addAction(), это не работает для меня, если я удалю его. –

+0

Это странно. Возможно, я ошибаюсь. : -/ –

+1

Да, определенно нужно 'addAction', иначе какой порядок он и т. Д. ... Он не предполагает макет ... Кроме того, нужно сказать, какой именно виджет должен склеить его (например, часто действие определяемый как дочерний элемент главного окна, но фактически добавляется в панель инструментов, а не непосредственно в главное окно). Если вы не показываете действие с помощью значка, но при этом используете его только с помощью сочетаний клавиш, вам нужно добавить его в виджет: http://stackoverflow.com/questions/1346964/use-qaction-without-adding -to-menu-or-toolbar? rq = 1 – neuronet