I want to use keyboard-shortcuts in my code in PyQt4

混江龙づ霸主 提交于 2019-12-10 10:39:47

问题


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

回答1:


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 class: http://pyqt.sourceforge.net/Docs/PyQt4/qshortcut.html

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

Qt.Key reference: 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)


来源:https://stackoverflow.com/questions/25398528/i-want-to-use-keyboard-shortcuts-in-my-code-in-pyqt4

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!