我想在PyQt4中的代码中使用键盘快捷键

2024-05-13 07:32:37 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在开发一个客房管理程序。当用户按下“ESC”键时,“Dialog”终止。我想阻止这一切。所以,我想在“第一个代码”中使用“第二个代码”

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

Tags: fromimportselfdefsysactiontranslatedialog
1条回答
网友
1楼 · 发布于 2024-05-13 07:32:37

使用键盘快捷键的简单方法是通过使用QKeySequence中的键序列来使用QShortcut

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

QKeySequence类:http://pyqt.sourceforge.net/Docs/PyQt4/qkeysequence.html

Qt.Key引用:http://pyqt.sourceforge.net/Docs/PyQt4/qt.html


另一种实现上述代码的方法是,此示例演示如何在对话框中实现:

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)

相关问题 更多 >