首页 > 解决方案 > PyQt5 - 在主窗口小部件之外调用一个函数

问题描述

我有两个脚本文件test_qt.pytest.py。我想在按下按钮时调用一个函数。但是这个函数不在 Widget 文件中(test_qt)。如果它在 Widget 文件中,我可以轻松调用该函数,但如果我尝试从 test_qt 中调用它,我会收到此错误“ AttributeError: 'Ui_Form' object has no attribute 'test_something' ”。我检查了很多例子,但我还没有解决。我想调用test_something()函数。我不知道错误在哪里。我定义了print_something()函数来调用test_something()

#----test_qt.py----
from PyQt5 import QtCore, QtGui, QtWidgets
from test import*

class Ui_Form(object):
    def setupUi(self, Form):
        Form.setObjectName("Form")
        Form.resize(400, 300)
        self.pushButton = QtWidgets.QPushButton(Form)
        self.pushButton.setGeometry(QtCore.QRect(150, 100, 93, 28))
        self.pushButton.setObjectName("pushButton")
        self.pushButton.clicked.connect(self.print_something)

        self.retranslateUi(Form)
        QtCore.QMetaObject.connectSlotsByName(Form)

    def retranslateUi(self, Form):
        _translate = QtCore.QCoreApplication.translate
        Form.setWindowTitle(_translate("Form", "Form"))
        self.pushButton.setText(_translate("Form", "PushButton"))

    def print_something(self):
        #strong textprint("click")
        self.test_something()

if __name__ == "__main__":
    import sys
    app = QtWidgets.QApplication(sys.argv)
    Form = QtWidgets.QWidget()
    ui = Ui_Form()
    ui.setupUi(Form)
    Form.show()
    sys.exit(app.exec_())
---------------------------
#---- test.py -------------
def test_something():
    print("clicked")
---------------------------

标签: pythonqtwidgetpyqt5qt-designer

解决方案


删除selfinself.test_something()应该调用导入的函数。

注意:星型导入被视为代码异味,可能会污染命名空间,甚至会覆盖现有符号。你应该尽量避免它们:)


推荐阅读