You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.29 15:14:58