【问题标题】:PyQt5 push button method called from separate python file从单独的 python 文件调用的 PyQt5 按钮方法
【发布时间】:2020-03-23 04:24:46
【问题描述】:

这是我的ma​​inWindow.py,这里我只有一个按钮:

from PyQt5 import QtCore, QtGui, QtWidgets


class Ui_MainWindow(object):
    def setupUi(self, MainWindow):
        MainWindow.setObjectName("MainWindow")
        MainWindow.resize(800, 600)
        self.centralwidget = QtWidgets.QWidget(MainWindow)
        self.centralwidget.setObjectName("centralwidget")
        self.horizontalLayout = QtWidgets.QHBoxLayout(self.centralwidget)
        self.horizontalLayout.setObjectName("horizontalLayout")
        self.pushButton = QtWidgets.QPushButton(self.centralwidget)
        self.pushButton.setObjectName("pushButton")
        self.horizontalLayout.addWidget(self.pushButton)
        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.pushButton.setText(_translate("MainWindow", "Run"))


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

我想创建一个单独的文件eventHandler.py,我可以在其中编写pushButton calle方法。

from PyQt5 import QtCore, QtGui, QtWidgets
from mainWindow import *

self.pushButton.clicked.connect(self.function1)

def function1(self):                                             
        print("function called")

谁能告诉我如何初始化类并正确编写它?

【问题讨论】:

    标签: pyqt5


    【解决方案1】:

    你的方法不合适,eventHandler必须是mainWindow使用的库,反之不行。

    ma​​in.py

    from PyQt5 import QtCore, QtGui, QtWidgets
    
    from mainWindow import Ui_MainWindow
    
    from eventHandler import function1
    
    class MainWindow(QtWidgets.QMainWindow, Ui_MainWindow):
        def __init__(self, parent=None):
            super(MainWindow, self).__init__(parent)
            self.setupUi(self)
            self.pushButton.clicked.connect(function1)
    
    if __name__ == "__main__":
        import sys
        app = QtWidgets.QApplication(sys.argv)
        w = MainWindow()
        w.show()
        sys.exit(app.exec_())
    

    eventHandler.py

    def function1():                                
        print("function called")
    

    【讨论】:

    • 好的,谢谢。实际上我的 main.py 是从 .ui 文件生成的。因此,如果我更改了 ui 文件,则 main.py 将更改,并且我必须再次重新编写此 self.pushButton.clicked.connect(function1)。
    • @DhurjatiRiyanBorah 此解决方案不会修改mainWindow.pymain.py 是一个单独的文件,它从 mainWindow.py 的原始版本导入 Ui_MainWindow
    • @DhurjatiRiyanBorah 根据您的代码,pyuic 生成的文件是 mainWindow.py。并且由于我的解决方案没有修改 mainWindow.py,因此,我没有在回答中说明任何内容。
    猜你喜欢
    • 2020-12-05
    • 2021-08-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-29
    • 1970-01-01
    相关资源
    最近更新 更多