我想在PyQt4的代码中使用键盘快捷键 [英] I want to use keyboard-shortcuts in my code in PyQt4
问题描述
我正在制定一个p-room管理程序.当用户按下"ESC"键时,对话框"终止.我想防止这种情况.所以,我想在第一代码"中使用第二代码"
I am developing a p-room management program. When the user presses the "ESC" key, "Dialog" is terminated. I want to prevent this. So, I want to use 'second code' in 'first code'
from PyQt4 import QtCore, QtGui
try:
_fromUtf8 = QtCore.QString.fromUtf8
except AttributeError:
def _fromUtf8(s):
return s
try:
_encoding = QtGui.QApplication.UnicodeUTF8
def _translate(context, text, disambig):
return QtGui.QApplication.translate(context, text, disambig, _encoding)
except AttributeError:
def _translate(context, text, disambig):
return QtGui.QApplication.translate(context, text, disambig)
class Ui_Dialog(object):
def setupUi(self, Dialog):
self.Dialog = Dialog
self.Dialog.setObjectName(_fromUtf8("self.Dialog"))
self.Dialog.resize(190, 98)
self.pushButton = QtGui.QPushButton(self.Dialog)
self.pushButton.setGeometry(QtCore.QRect(0, 0, 191, 101))
font = QtGui.QFont()
font.setPointSize(13)
self.pushButton.setFont(font)
self.pushButton.setObjectName(_fromUtf8("pushButton"))
self.retranslateUi(self.Dialog)
QtCore.QMetaObject.connectSlotsByName(self.Dialog)
QtCore.QObject.connect(self.pushButton, QtCore.SIGNAL('released()'), self.Dialog.close) # <- put signal to close when clicked.
def retranslateUi(self, Dialog):
self.Dialog.setWindowTitle(_translate("self.Dialog", "self.Dialog", None))
self.pushButton.setText(_translate("self.Dialog", "hi", None))
class QCustomDialog (QtGui.QDialog): # <- Implement your own
def closeEvent(self, event):
reply = QtGui.QMessageBox.question(self, 'Message',
"Are you sure to quit?", QtGui.QMessageBox.Yes |
QtGui.QMessageBox.No, QtGui.QMessageBox.No)
if reply == QtGui.QMessageBox.Yes:
event.accept()
else:
event.ignore()
if __name__ == "__main__":
import sys
app = QtGui.QApplication(sys.argv)
Dialog = QCustomDialog()
ui = Ui_Dialog()
ui.setupUi(Dialog)
Dialog.show()
sys.exit(app.exec_())
from PyQt4.Qt import Qt
from PyQt4 import QtCore, QtGui
from PyQt4.QtCore import QObject, SIGNAL
from PyQt4.QtGui import QWidget, QApplication, QMainWindow, QAction, QIcon, QKeySequence
import os, time, MySQLdb, socket, sys
class MainWindow(QMainWindow):
def __init__(self, parent):
QMainWindow.__init__(self, parent)
self.centralwidget = QWidget(self)
self.action = QAction(QIcon(), "Down", self)
self.action.setShortcut("ESC")
self.action.setShortcutContext(Qt.ApplicationShortcut)
self.addAction(self.action)
QObject.connect(self.action, SIGNAL("triggered()"), self.down)
def down(self):
print 'DOWN!!!'
def main():
app = QApplication(sys.argv)
mw = MainWindow(None)
mw.show()
sys.exit(app.exec_())
if __name__ == '__main__':
main()
推荐答案
使用键盘快捷键的简便方法是使用QShortcut
,方法是使用QKeySequence
中的键序列:
Easy way to use keyboard shortcut is to use QShortcut
by using the key sequence in QKeySequence
:
class MainWindow (QtGui.QMainWindow):
def __init__ (self, parent = None):
QtGui.QMainWindow.__init__(self, parent)
.
.
.
self.myQCustomDialog = QCustomDialog() # <- From code 1
ui = Ui_Dialog() # <- From code 1
ui.setupUi(self.myQCustomDialog) # <- From code 1
self.setCentralWidget(self.myQCustomDialog) # <- Set to this central widget
.
.
.
self.connect(QtGui.QShortcut(QtGui.QKeySequence(QtCore.Qt.Key_Escape), self), QtCore.SIGNAL('activated()'), self.down)
def down(self):
print 'DOWN!!!'
# Or put code to implement from code 1
QShortcut
类: http://pyqt.sourceforge.net/Docs/PyQt4/qshortcut.html
QShortcut
class: http://pyqt.sourceforge.net/Docs/PyQt4/qshortcut.html
QKeySequence
类: http://pyqt.sourceforge.net/Docs/PyQt4/qkeysequence.html
Qt.Key
参考: http://pyqt.sourceforge.net/Docs/PyQt4/qt.html
另一种实现上述代码的方法,此示例显示了如何在对话框中实现:
Another way implement the code above, this example shows how to implement in dialog:
class Ui_Dialog(object):
def setupUi(self, Dialog):
.
.
.
QtCore.QObject.connect(QtGui.QShortcut(QtGui.QKeySequence(QtCore.Qt.Key_Escape), self.Dialog), QtCore.SIGNAL('activated()'), self.Dialog.close)
这篇关于我想在PyQt4的代码中使用键盘快捷键的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!