我正在使用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()
答案 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: