Python pyqt5如何打开新窗口和重新打开旧窗口

Python pyqt5如何打开新窗口和重新打开旧窗口,python,python-3.x,menu,pyqt5,Python,Python 3.x,Menu,Pyqt5,你好 我不知道该怎么办,窗口(register.py)从login.py打开得很好,但是窗口(login.py)没有打开,因为register.py 怎么办 register.py login.py 如果删除,则返回错误代码 screen = app.primaryScreen() size = screen.size() print('Size: %d x %d' % (size.width(), size.height()))

你好 我不知道该怎么办,窗口(register.py)从login.py打开得很好,但是窗口(login.py)没有打开,因为register.py

怎么办

register.py

login.py

如果删除,则返回错误代码

        screen = app.primaryScreen()
        size = screen.size()
        print('Size: %d x %d' % (size.width(), size.height()))
        rect = screen.availableGeometry()
        print('Available: %d x %d' % (rect.width(), rect.height()))
        self.window.move((rect.width() / 2) - 230, (rect.height() / 2) - 230)

这两个问题都与范围有关。
app
是两个脚本中的一个局部变量,它仅存在于正在运行的脚本的范围内(如果_uname__;==“_umain__;”:行)。 因此,如果您运行login.py,
app
在其作用域中可用,但如果您运行register.py
app
则只存在于它,而不存在于login.py作用域中(因为它从未在“那里”创建)

由于primaryScreen是一个静态函数,因此不需要对应用程序实例的引用(无论如何,您可以通过
qtwidts.QApplication.instance()
获得该引用):

只需将该行更改为:

    screen = QtWidgets.QApplication.primaryScreen()
在第二个问题中,问题是类似的:由于您运行的是login.py,
MainWindow\u Register
从未在Register.py中声明

我没有一个“简单”的解决方案,因为您的方法有点混乱。
首先,您似乎试图从pyuic的输出开始实现您的程序,如果是这种情况,您应该真正避免它:编写您自己的代码,并按照中的建议使用pyuic生成的文件。
然后,当您必须面对多个相关窗口时,最好避免将自己称为“递归”,并使用单个窗口(或者更好,单独的对象,甚至QApplication的子类)作为“管理器”。这将以编程的方式使一切变得更容易,避免冗余代码,同时减少出现错误的可能性


在您的情况下,您可能应该始终使用登录窗口作为“起点”,然后在必要时显示注册窗口。

这两个问题都与范围相关。
app
是两个脚本中的一个局部变量,它仅存在于正在运行的脚本的范围内(如果_uname__;==“_umain__;”:行)。 因此,如果您运行login.py,
app
在其作用域中可用,但如果您运行register.py
app
则只存在于它,而不存在于login.py作用域中(因为它从未在“那里”创建)

由于primaryScreen是一个静态函数,因此不需要对应用程序实例的引用(无论如何,您可以通过
qtwidts.QApplication.instance()
获得该引用):

只需将该行更改为:

    screen = QtWidgets.QApplication.primaryScreen()
在第二个问题中,问题是类似的:由于您运行的是login.py,
MainWindow\u Register
从未在Register.py中声明

我没有一个“简单”的解决方案,因为您的方法有点混乱。
首先,您似乎试图从pyuic的输出开始实现您的程序,如果是这种情况,您应该真正避免它:编写您自己的代码,并按照中的建议使用pyuic生成的文件。
然后,当您必须面对多个相关窗口时,最好避免将自己称为“递归”,并使用单个窗口(或者更好,单独的对象,甚至QApplication的子类)作为“管理器”。这将以编程的方式使一切变得更容易,避免冗余代码,同时减少出现错误的可能性


在您的情况下,您可能应该始终使用登录窗口作为“起点”,然后在必要时显示注册窗口。

您好,欢迎来到StackOverflow。请花一些时间阅读上的指南,花一些时间创建一个无需太多努力即可运行的服务,并记住避免代码的外部服务,因为它们有时可能变得不可用,使未来的用户无法访问它,这些用户可能正在寻找类似问题的解决方案,或者能够为您提供更多帮助。您好,欢迎来到StackOverflow。请花一些时间阅读上的指南,花一些时间创建一个无需太多努力即可运行的服务,并记住避免代码的外部服务,因为它们有时可能变得不可用,使未来用户无法访问它,这些用户可能正在寻找类似问题的解决方案,或者能够为您提供更多帮助。