python - Python 中的击键事件

标签 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()

最佳答案

设置键盘快捷键的常用方法是使用 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_())

关于python - Python 中的击键事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20622223/

相关文章:

python - Set() 在一个很长的列表上并创建一个更长的矩阵

python - 如何在pytest中忽略python UserWarning?

qt - 在 PyQt 中模拟鼠标点击事件

python - 在 QMessageBox 中显示 MySQL 错误

python - PyQt:连接对话框中的按钮

python - 优化迭代检查连续值之间的最大差异

python - Django 是否试图两次制作同一张 table ?

python - 跨平台 Python 通知库

python - 捕获 QMainWindow 外部的鼠标位置(无需单击)

python - 在 OSX 中的另一个应用程序上触发放置事件