Я разрабатываю программу управления p-room. Когда пользователь нажимает клавишу «ESC», «диалог» завершается. Я хочу предотвратить это. Итак, я хочу использовать «второй код» в «первом коде».
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 ответ
Простой способ использования сочетания клавиш - использовать QShortcut
, используя последовательность клавиш в 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
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)
QKeySequence
отсутствует буква "l".
Похожие вопросы
Новые вопросы
python
Python — это мультипарадигмальный многоцелевой язык программирования с динамической типизацией. Он предназначен для быстрого изучения, понимания и использования, а также обеспечивает чистый и унифицированный синтаксис. Обратите внимание, что Python 2 официально не поддерживается с 01.01.2020. Если у вас есть вопросы о версии Python, добавьте тег [python-2.7] или [python-3.x]. При использовании варианта Python (например, Jython, PyPy) или библиотеки (например, Pandas, NumPy) укажите это в тегах.