longgege0919 发表于 2022-8-19 19:24

Qt designer的问题

本帖最后由 longgege0919 于 2022-8-19 20:09 编辑

比如用Qt designer,创建这样一个窗口,在窗口上添加一个按钮,并为这个按钮添加一个自定义的槽函数
ui文件在这,原名button.ui ,被我重命名成button.txt了




保存成ui文件后,用pyuic转换成py文件,代码如下
from PyQt5 import QtCore, QtGui, QtWidgets


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, 140, 93, 28))
      self.pushButton.setObjectName("pushButton")

      self.retranslateUi(Form)
      self.pushButton.clicked.connect(Form.printshow)
      QtCore.QMetaObject.connectSlotsByName(Form)

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


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

按说这里的Form.printshow没有具体定义,会报错,但是我不在这里直接运行,而是在另外新建一个py文件,导入这个包,新建文件代码如下
import sys
from PyQt5.Qt import *
from PyQt5 import QtCore, QtGui, QtWidgets
from button_2 import Ui_Form
class MyWindow(QWidget, Ui_Form):
    def __init__(self):
      super(MyWindow, self).__init__()
      self.setupUi(self)
    def printshow(self):
      print('test')

if __name__ == "__main__":

    app = QApplication(sys.argv)
    Form = QWidget()
    ui = MyWindow()
    ui.setupUi(Form)
    Form.show()
    sys.exit(app.exec_())


运行这段代码,还是会报错,即使我定义了这个printshow方法。而且报错是直接提示错误在ui文件转成的py文件里,错误类型是AttributeError: 'QWidget' object has no attribute 'printshow',错误提示如下


请问各位大神,如何在不修改界面文件的前提下,在后面文件里导入前面的包,正常运行呢?

洛枫 发表于 2022-8-20 02:31

longgege0919 发表于 2022-8-20 12:11

洛枫 发表于 2022-8-20 02:31
把他改成:

感谢,但是这样的话,界面里还是报错。我暂时解决了,不在Qt designer里定义槽函数,在调用里定义,也能用

洛枫 发表于 2022-8-20 17:03

页: [1]
查看完整版本: Qt designer的问题