![](/img/trans.png)
[英]PyQt 5 keyPressEvent doesn`t work for terminating App Qt Designer
[英]keyPressEvent() method doesn't work for PyQt5 / Python 3+
我是python的新手。 我使用“Qt Designer”設計了一個簡單的計算器應用程序,然后使用“pyuic5”將“ui”文件轉換為“py”。
但是當我添加了 keyPressEvent() 方法時,該方法不起作用。 我不知道為什么。 我已經嘗試使用 setFocus() 方法來解決這個問題,但失敗了。
有人可以幫我嗎?
請在下面檢查我的代碼:
from PyQt5 import QtCore, QtGui, QtWidgets
import sys
class Ui_MainWindow(object):
def setupUi(self, MainWindow):
MainWindow.setMinimumSize(QtCore.QSize(330, 280))
MainWindow.setMaximumSize(QtCore.QSize(330, 280))
self.centralwidget = QtWidgets.QWidget(MainWindow)
self.lineEdit_display = QtWidgets.QLineEdit(self.centralwidget)
self.lineEdit_display.setGeometry(QtCore.QRect(10, 0, 311, 41))
font = QtGui.QFont()
font.setPointSize(14)
font.setBold(True)
font.setWeight(75)
self.lineEdit_display.setFont(font)
self.lineEdit_display.setMaxLength(15)
self.lineEdit_display.setAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignTrailing|QtCore.Qt.AlignVCenter)
self.lineEdit_display.setReadOnly(True)
self.pButton_0 = QtWidgets.QPushButton(self.centralwidget)
self.pButton_0.setGeometry(QtCore.QRect(10, 200, 51, 41))
self.pButton_0.setCursor(QtGui.QCursor(QtCore.Qt.ArrowCursor))
self.pButton_00 = QtWidgets.QPushButton(self.centralwidget)
self.pButton_00.setGeometry(QtCore.QRect(70, 200, 51, 41))
self.pButton_dot = QtWidgets.QPushButton(self.centralwidget)
self.pButton_dot.setGeometry(QtCore.QRect(130, 200, 51, 41))
self.pButton_1 = QtWidgets.QPushButton(self.centralwidget)
self.pButton_1.setGeometry(QtCore.QRect(10, 150, 51, 41))
self.pButton_2 = QtWidgets.QPushButton(self.centralwidget)
self.pButton_2.setGeometry(QtCore.QRect(70, 150, 51, 41))
self.pButton_3 = QtWidgets.QPushButton(self.centralwidget)
self.pButton_3.setGeometry(QtCore.QRect(130, 150, 51, 41))
self.pButton_4 = QtWidgets.QPushButton(self.centralwidget)
self.pButton_4.setGeometry(QtCore.QRect(10, 100, 51, 41))
self.pButton_5 = QtWidgets.QPushButton(self.centralwidget)
self.pButton_5.setGeometry(QtCore.QRect(70, 100, 51, 41))
self.pButton_6 = QtWidgets.QPushButton(self.centralwidget)
self.pButton_6.setGeometry(QtCore.QRect(130, 100, 51, 41))
self.pButton_7 = QtWidgets.QPushButton(self.centralwidget)
self.pButton_7.setGeometry(QtCore.QRect(10, 50, 51, 41))
self.pButton_8 = QtWidgets.QPushButton(self.centralwidget)
self.pButton_8.setGeometry(QtCore.QRect(70, 50, 51, 41))
self.pButton_9 = QtWidgets.QPushButton(self.centralwidget)
self.pButton_9.setGeometry(QtCore.QRect(130, 50, 51, 41))
self.pButton_add = QtWidgets.QPushButton(self.centralwidget)
self.pButton_add.setGeometry(QtCore.QRect(210, 50, 51, 41))
self.pButton_subtract = QtWidgets.QPushButton(self.centralwidget)
self.pButton_subtract.setGeometry(QtCore.QRect(210, 100, 51, 41))
self.pButton_multiplication = QtWidgets.QPushButton(self.centralwidget)
self.pButton_multiplication.setGeometry(QtCore.QRect(210, 150, 51, 41))
self.pButton_divide = QtWidgets.QPushButton(self.centralwidget)
self.pButton_divide.setGeometry(QtCore.QRect(210, 200, 51, 41))
self.pButton_equal = QtWidgets.QPushButton(self.centralwidget)
self.pButton_equal.setGeometry(QtCore.QRect(270, 150, 51, 91))
self.pButton_ac = QtWidgets.QPushButton(self.centralwidget)
self.pButton_ac.setGeometry(QtCore.QRect(270, 50, 51, 91))
font = QtGui.QFont()
font.setPointSize(14)
self.pButton_ac.setFont(font)
self.pButton_ac.setDefault(True)
MainWindow.setCentralWidget(self.centralwidget)
self.menubar = QtWidgets.QMenuBar(MainWindow)
self.menubar.setGeometry(QtCore.QRect(0, 0, 330, 27))
self.menuMain = QtWidgets.QMenu(self.menubar)
MainWindow.setMenuBar(self.menubar)
self.actionExit = QtWidgets.QAction(MainWindow)
self.actionAbout = QtWidgets.QAction(MainWindow)
self.menuMain.addAction(self.actionExit)
self.menuMain.addAction(self.actionAbout)
self.menubar.addAction(self.menuMain.menuAction())
self.retranslateUi(MainWindow)
QtCore.QMetaObject.connectSlotsByName(MainWindow)
def retranslateUi(self, MainWindow):
_translate = QtCore.QCoreApplication.translate
MainWindow.setWindowTitle(_translate("MainWindow", "Simple Calculator"))
MainWindow.setToolTip(_translate("MainWindow", "Simple Calculator"))
self.pButton_0.setToolTip(_translate("MainWindow", "0"))
self.pButton_0.setText(_translate("MainWindow", "0"))
self.pButton_00.setToolTip(_translate("MainWindow", "00"))
self.pButton_00.setText(_translate("MainWindow", "00"))
self.pButton_dot.setToolTip(_translate("MainWindow", "."))
self.pButton_dot.setText(_translate("MainWindow", "."))
self.pButton_1.setToolTip(_translate("MainWindow", "1"))
self.pButton_1.setText(_translate("MainWindow", "1"))
self.pButton_2.setToolTip(_translate("MainWindow", "2"))
self.pButton_2.setText(_translate("MainWindow", "2"))
self.pButton_3.setToolTip(_translate("MainWindow", "3"))
self.pButton_3.setText(_translate("MainWindow", "3"))
self.pButton_4.setToolTip(_translate("MainWindow", "4"))
self.pButton_4.setText(_translate("MainWindow", "4"))
self.pButton_5.setToolTip(_translate("MainWindow", "5"))
self.pButton_5.setText(_translate("MainWindow", "5"))
self.pButton_6.setToolTip(_translate("MainWindow", "6"))
self.pButton_6.setText(_translate("MainWindow", "6"))
self.pButton_7.setToolTip(_translate("MainWindow", "7"))
self.pButton_7.setText(_translate("MainWindow", "7"))
self.pButton_8.setToolTip(_translate("MainWindow", "8"))
self.pButton_8.setText(_translate("MainWindow", "8"))
self.pButton_9.setToolTip(_translate("MainWindow", "9"))
self.pButton_9.setText(_translate("MainWindow", "9"))
self.pButton_add.setToolTip(_translate("MainWindow", "+"))
self.pButton_add.setText(_translate("MainWindow", "+"))
self.pButton_subtract.setToolTip(_translate("MainWindow", "-"))
self.pButton_subtract.setText(_translate("MainWindow", "-"))
self.pButton_multiplication.setToolTip(_translate("MainWindow", "\N{MULTIPLICATION SIGN}"))
self.pButton_multiplication.setText(_translate("MainWindow", "\N{MULTIPLICATION SIGN}"))
self.pButton_divide.setToolTip(_translate("MainWindow", "\N{DIVISION SIGN}"))
self.pButton_divide.setText(_translate("MainWindow", "\N{DIVISION SIGN}"))
self.pButton_equal.setToolTip(_translate("MainWindow", "="))
self.pButton_equal.setText(_translate("MainWindow", "="))
self.pButton_ac.setToolTip(_translate("MainWindow", "AC"))
self.pButton_ac.setText(_translate("MainWindow", "AC"))
self.lineEdit_display.setToolTip(_translate("MainWindow", "Display"))
self.lineEdit_display.setText(_translate("MainWindow", "0"))
self.menuMain.setTitle(_translate("MainWindow", "Mai&n"))
self.actionExit.setText(_translate("MainWindow", "&Exit"))
self.actionAbout.setText(_translate("MainWindow", "&About"))
def keyPressEvent(self, e):
print(e.key())
if __name__ == "__main__":
app = QtWidgets.QApplication(sys.argv)
MainWindow = QtWidgets.QMainWindow()
ui = Ui_MainWindow()
ui.setupUi(MainWindow)
MainWindow.show()
MainWindow.setFocus() #TRYING TO SET FOCUS FOR keyPressEvent
sys.exit(app.exec_())
先生,我找不到你的語法具體是什么錯誤,所以我編輯了你的代碼以盡可能地與你的代碼相似。
這是您的代碼進行了一些修改,看看它是否適合您。
from PyQt5 import QtCore, QtGui, QtWidgets
import sys
from PyQt5.QtWidgets import QAction
from PyQt5.QtWidgets import QLineEdit
from PyQt5.QtWidgets import QMainWindow
from PyQt5.QtWidgets import QMenu
from PyQt5.QtWidgets import QMenuBar
from PyQt5.QtWidgets import QPushButton
from PyQt5.QtWidgets import QWidget
class Ui_MainWindow(QMainWindow):
def __init__(self):
super(Ui_MainWindow, self).__init__()
# self.setupUi()
def setupUi(self):
self.setMinimumSize(QtCore.QSize(330, 280))
self.setMaximumSize(QtCore.QSize(330, 280))
self.centralwidget = QWidget()
self.lineEdit_display = QLineEdit(self.centralwidget)
self.lineEdit_display.setGeometry(QtCore.QRect(10, 0, 311, 41))
font = QtGui.QFont()
font.setPointSize(14)
font.setBold(True)
font.setWeight(75)
self.lineEdit_display.setFont(font)
self.lineEdit_display.setMaxLength(15)
self.lineEdit_display.setAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignTrailing|QtCore.Qt.AlignVCenter)
self.lineEdit_display.setReadOnly(True)
self.pButton_0 = QPushButton(self.centralwidget)
self.pButton_0.setGeometry(QtCore.QRect(10, 200, 51, 41))
self.pButton_0.setCursor(QtGui.QCursor(QtCore.Qt.ArrowCursor))
self.pButton_00 = QPushButton(self.centralwidget)
self.pButton_00.setGeometry(QtCore.QRect(70, 200, 51, 41))
self.pButton_dot = QPushButton(self.centralwidget)
self.pButton_dot.setGeometry(QtCore.QRect(130, 200, 51, 41))
self.pButton_1 = QPushButton(self.centralwidget)
self.pButton_1.setGeometry(QtCore.QRect(10, 150, 51, 41))
self.pButton_2 = QPushButton(self.centralwidget)
self.pButton_2.setGeometry(QtCore.QRect(70, 150, 51, 41))
self.pButton_3 = QPushButton(self.centralwidget)
self.pButton_3.setGeometry(QtCore.QRect(130, 150, 51, 41))
self.pButton_4 = QPushButton(self.centralwidget)
self.pButton_4.setGeometry(QtCore.QRect(10, 100, 51, 41))
self.pButton_5 = QPushButton(self.centralwidget)
self.pButton_5.setGeometry(QtCore.QRect(70, 100, 51, 41))
self.pButton_6 = QPushButton(self.centralwidget)
self.pButton_6.setGeometry(QtCore.QRect(130, 100, 51, 41))
self.pButton_7 = QPushButton(self.centralwidget)
self.pButton_7.setGeometry(QtCore.QRect(10, 50, 51, 41))
self.pButton_8 = QPushButton(self.centralwidget)
self.pButton_8.setGeometry(QtCore.QRect(70, 50, 51, 41))
self.pButton_9 = QPushButton(self.centralwidget)
self.pButton_9.setGeometry(QtCore.QRect(130, 50, 51, 41))
self.pButton_add = QPushButton(self.centralwidget)
self.pButton_add.setGeometry(QtCore.QRect(210, 50, 51, 41))
self.pButton_subtract = QPushButton(self.centralwidget)
self.pButton_subtract.setGeometry(QtCore.QRect(210, 100, 51, 41))
self.pButton_multiplication = QPushButton(self.centralwidget)
self.pButton_multiplication.setGeometry(QtCore.QRect(210, 150, 51, 41))
self.pButton_divide = QPushButton(self.centralwidget)
self.pButton_divide.setGeometry(QtCore.QRect(210, 200, 51, 41))
self.pButton_equal = QPushButton(self.centralwidget)
self.pButton_equal.setGeometry(QtCore.QRect(270, 150, 51, 91))
self.pButton_ac = QPushButton(self.centralwidget)
self.pButton_ac.setGeometry(QtCore.QRect(270, 50, 51, 91))
font = QtGui.QFont()
font.setPointSize(14)
self.pButton_ac.setFont(font)
self.pButton_ac.setDefault(True)
self.setCentralWidget(self.centralwidget)
self.menubar = QMenuBar(self)
self.menubar.setGeometry(QtCore.QRect(0, 0, 330, 27))
self.menuMain = QMenu(self.menubar)
self.setMenuBar(self.menubar)
self.actionExit = QAction(self)
self.actionAbout = QAction(self)
self.menuMain.addAction(self.actionExit)
self.menuMain.addAction(self.actionAbout)
self.menubar.addAction(self.menuMain.menuAction())
self.retranslateUi()
QtCore.QMetaObject.connectSlotsByName(self)
def retranslateUi(self):
_translate = QtCore.QCoreApplication.translate
self.setWindowTitle(_translate("MainWindow", "Simple Calculator"))
self.setToolTip(_translate("MainWindow", "Simple Calculator"))
self.pButton_0.setToolTip(_translate("MainWindow", "0"))
self.pButton_0.setText(_translate("MainWindow", "0"))
self.pButton_00.setToolTip(_translate("MainWindow", "00"))
self.pButton_00.setText(_translate("MainWindow", "00"))
self.pButton_dot.setToolTip(_translate("MainWindow", "."))
self.pButton_dot.setText(_translate("MainWindow", "."))
self.pButton_1.setToolTip(_translate("MainWindow", "1"))
self.pButton_1.setText(_translate("MainWindow", "1"))
self.pButton_2.setToolTip(_translate("MainWindow", "2"))
self.pButton_2.setText(_translate("MainWindow", "2"))
self.pButton_3.setToolTip(_translate("MainWindow", "3"))
self.pButton_3.setText(_translate("MainWindow", "3"))
self.pButton_4.setToolTip(_translate("MainWindow", "4"))
self.pButton_4.setText(_translate("MainWindow", "4"))
self.pButton_5.setToolTip(_translate("MainWindow", "5"))
self.pButton_5.setText(_translate("MainWindow", "5"))
self.pButton_6.setToolTip(_translate("MainWindow", "6"))
self.pButton_6.setText(_translate("MainWindow", "6"))
self.pButton_7.setToolTip(_translate("MainWindow", "7"))
self.pButton_7.setText(_translate("MainWindow", "7"))
self.pButton_8.setToolTip(_translate("MainWindow", "8"))
self.pButton_8.setText(_translate("MainWindow", "8"))
self.pButton_9.setToolTip(_translate("MainWindow", "9"))
self.pButton_9.setText(_translate("MainWindow", "9"))
self.pButton_add.setToolTip(_translate("MainWindow", "+"))
self.pButton_add.setText(_translate("MainWindow", "+"))
self.pButton_subtract.setToolTip(_translate("MainWindow", "-"))
self.pButton_subtract.setText(_translate("MainWindow", "-"))
self.pButton_multiplication.setToolTip(_translate("MainWindow", "\N{MULTIPLICATION SIGN}"))
self.pButton_multiplication.setText(_translate("MainWindow", "\N{MULTIPLICATION SIGN}"))
self.pButton_divide.setToolTip(_translate("MainWindow", "\N{DIVISION SIGN}"))
self.pButton_divide.setText(_translate("MainWindow", "\N{DIVISION SIGN}"))
self.pButton_equal.setToolTip(_translate("MainWindow", "="))
self.pButton_equal.setText(_translate("MainWindow", "="))
self.pButton_ac.setToolTip(_translate("MainWindow", "AC"))
self.pButton_ac.setText(_translate("MainWindow", "AC"))
self.lineEdit_display.setToolTip(_translate("MainWindow", "Display"))
self.lineEdit_display.setText(_translate("MainWindow", "0"))
self.menuMain.setTitle(_translate("MainWindow", "Mai&n"))
self.actionExit.setText(_translate("MainWindow", "&Exit"))
self.actionAbout.setText(_translate("MainWindow", "&About"))
def keyPressEvent(self, e):
print(e.key())
if __name__ == "__main__":
app = QtWidgets.QApplication(sys.argv)
ui = Ui_MainWindow()
ui.setupUi()
ui.show()
sys.exit(app.exec_())
希望它有效^^
看起來您需要將每個小部件與一個事件連接起來。 GUI 是事件驅動的編程。 正如您所看到的,他們只是坐在那里看着您,直到用戶采取某些行動為止,您(程序員)有責任定義每個行動會發生什么。
例如,您的計算器有按鈕。 我假設當您按下數字按鈕時,您希望該數字顯示在代表顯示器的文本框中。 如果是這樣,那么您需要處理“clicked”事件。 類似的東西
self.pButton_9.clicked.connect(self.click_9) # connects button to action by defining a callback - an action to handle the event.
def click_9(self):
self.lineEdit_display.text += '9 '
我見過的最好的介紹教程之一是Here 。 我通常讓我所有的 Python 課程都通過它來開始學習 GUI 編程。
我也有這個問題。 在 setupUI 函數中使用此代碼:
MainWindow.keyPressEvent = self.keyPressEvent
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.