Python中的击键事件

时间:2013-12-16 22:27:56

标签: python pyqt

我正在使用python 2.7和Qt4。按ctrl + F键盘后我需要找到一个查找对话框。我正在使用这段代码进行测试,但我想这个方法永远不会在我的课程中执行。如果你能指导我,我将不胜感激。

我的第一个问题是,当按下该键时,根本不会调用此方法! 其次,如何组合两个键,如ctrl和F. 第三,如何调用对话框。 我是python的新手,如果你能帮助我,我感激不尽......

  def find(self, event):
     print("I am here")
     key = event.key()
     if QtGui.QApplication.keyboardModifiers() == QtCore.Qt.ControlModifier:
         #show find dialog
         reply=QMessageBox.question(self,'Message',"Find Dialog",QMessageBox.Yes|QMessageBox.No,QMessageBox.No)
         if reply==QMessageBox.Yes:
             event.accept()
         else:
             event.ignore()

2 个答案:

答案 0 :(得分:2)

设置键盘快捷键的常用方法是在菜单中使用QAction;或者如果没有菜单,则只有QShortcut

键序列本身(例如Ctrl + F)可以用QKeySequence构建。

下面的脚本显示了设置打开对话框的快捷方式的两种不同方法:

from PyQt4 import QtCore, QtGui

class Window(QtGui.QMainWindow):
    def __init__(self):
        QtGui.QMainWindow.__init__(self)
        menu = self.menuBar().addMenu('&File')
        action = menu.addAction('&Open')
        action.setShortcut(QtGui.QKeySequence('Ctrl+F'))
        action.triggered.connect(self.handleFind)
        shortcut = QtGui.QShortcut(QtGui.QKeySequence('F3'), self)
        shortcut.activated.connect(self.handleFind)
        label = QtGui.QLabel(self)
        label.setText('<center>Press Ctrl+F or F3<center>')
        self.setCentralWidget(label)

    def handleFind(self):
        reply = QtGui.QMessageBox.question(
            self, 'Message', 'Find Dialog',
            QtGui.QMessageBox.Yes | QtGui.QMessageBox.No)
        if reply == QtGui.QMessageBox.Yes:
            print('Yes')
        else:
            print('No')

if __name__ == '__main__':

    import sys
    app = QtGui.QApplication(sys.argv)
    window = Window()
    window.setGeometry(500, 300, 300, 200)
    window.show()
    sys.exit(app.exec_())

答案 1 :(得分:1)

F键的枚举为Qt.Key_F,而不是Qt.F

对于控制,您可以执行以下操作:

if QtGui.QApplication.keyboardModifiers() == QtCore.Qt.ControlModifier:

或者,如果您想忽略其他键盘修饰符,请执行以下操作:

if QtGui.QApplication.keyboardModifiers() | QtCore.Qt.ControlModifier == QtCore.Qt.ControlModifier: