PyQt5窗口间传变量报错:TypeError: Ui_MainWindow() takes no arguments
解决方案
错误原因
Ui_MainWindow是通过pyuic编译UI文件生成的类,它的__init__方法默认不接受额外参数,所以直接调用Ui_MainWindow(self.fg)会触发TypeError。正确的做法是在你自定义的Window类中接收传递的变量,而非直接传给自动生成的UI类。
具体修改步骤
1. 修改login.py
- 移除
LoginScreen类不必要的继承(无需继承Ui_MainWindow) - 在
transfer方法中直接创建Window类实例并传入flag值,不再手动创建QMainWindow和Ui_MainWindow
修改后的login.py代码:
import sys from PyQt5.QtWidgets import QApplication, QMainWindow import login_screen from app import Window from login_screen import Ui_Login_screen class LoginScreen(QMainWindow, Ui_Login_screen): def __init__(self): super(LoginScreen, self).__init__() self.ui = login_screen.Ui_Login_screen() self.ui.setupUi(self) self.ui.pushButton_login.clicked.connect(self.login) def login(self): username=self.ui.lineEdit.text() password=self.ui.lineEdit_2.text() if username=="admin" and password=="admin1" : self.transfer(flag=1) self.close() elif username=="user1" and password=="1user1" : self.transfer(flag=2) self.close() else: self.ui.label_status.setText("ERROR") def transfer(self, flag): self.window = Window(flag=flag) self.window.show() if __name__ == "__main__": app = QApplication(sys.argv) win = LoginScreen() win.show() sys.exit(app.exec())
2. 修改app.py
- 给
Window类的__init__方法添加flag参数 - 根据
flag值控制按钮的显示与隐藏(替换成你实际的按钮对象名即可)
修改后的app.py代码:
import sys import window_8 from PyQt5.QtWidgets import QApplication, QMainWindow from window_8 import Ui_MainWindow class Window(QMainWindow, Ui_MainWindow): def __init__(self, flag): super(Window, self).__init__() self.ui = window_8.Ui_MainWindow() self.ui.setupUi(self) # 根据flag控制按钮显示/隐藏 if flag == 1: self.ui.admin_btn.show() self.ui.user_btn.hide() elif flag == 2: self.ui.admin_btn.hide() self.ui.user_btn.show() # 测试用:显示当前flag值 self.ui.textEdit_status_N.setPlainText(f"当前权限标识: {flag}") if __name__ == "__main__": app = QApplication(sys.argv) win = Window(flag=1) win.show() sys.exit(app.exec())
关键说明
- 自动生成的UI类(如
Ui_MainWindow)不要直接修改,所有自定义逻辑都放在你自己编写的Window、LoginScreen类中 - 窗口间传递参数的核心是给自定义窗口类的构造方法添加参数,而非修改自动生成的UI代码
- 如果
Ui_Help_w类不存在,务必从Window的继承列表中移除,避免引发额外错误
内容的提问来源于stack exchange,提问作者John_2202
相关产品推荐
相关产品推荐

