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
把他改成:
感谢,但是这样的话,界面里还是报错。我暂时解决了,不在Qt designer里定义槽函数,在调用里定义,也能用
页:
[1]