首页 > 解决方案 > 在 Python (PyQt5) 中使用子类处理 keyPressEvent

问题描述

我正在尝试在一个子类中实现 keyPressEvent,该子类在另一个文件中,而不是由 Qt 设计器生成的 .ui 文件,因为我想在我的 GUI 中保持设计和逻辑彼此分离。我尝试做类似我在此链接中找到的操作(重新设计用户界面后 QtDesigner 更改将丢失),但不明白如何在设计文件中实现它。

设计文件:


class Ui_MainWindow(object):

    def setupUi(self, MainWindow):
        [removed non relevant parts in the setup]

        self.searchButton = QtWidgets.QPushButton(self.centralwidget)
        self.searchButton.setGeometry(QtCore.QRect(30, 85, 110, 33))
        self.searchButton.setObjectName("searchButton")
        self.searchBox = QtWidgets.QLineEdit(self.centralwidget)

        MainWindow.setCentralWidget(self.centralwidget)
        self.retranslateUi(MainWindow)
        QtCore.QMetaObject.connectSlotsByName(MainWindow)

    def retranslateUi(self, MainWindow):
        _translate = QtCore.QCoreApplication.translate
        MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))
        self.searchButton.setText(_translate("MainWindow", "Search"))

if __name__ == "__main__":
    import sys
    app = QtWidgets.QApplication(sys.argv)
    MainWindow = QtWidgets.QMainWindow()
    ui = Ui_MainWindow()
    ui.setupUi(MainWindow)
    MainWindow.show()
    sys.exit(app.exec_())

逻辑文件:

class Logic(QWidget, Ui_MainWindow):
    def __init__(self, *args, **kwargs):
        QWidget.__init__(self, *args, **kwargs)
        self.setupUi(self)

    def keyPressEvent(self, event):
        print ("something was pressed")

如何使逻辑文件中的 keyPressEvent 函数在 GUI 中按下某个键时执行?

标签: pythonpython-3.xpyqtpyqt5

解决方案


推荐阅读