你好 我不知道该怎么办,窗口( register.py )从 login.py 打开得很好,但是窗口( login.py >)由于 register.py 而无法打开。
该怎么办?
register.py
https://hastebin.com/oyoxoyemak.rb
login.py
https://hastebin.com/tanuhigome.rb
如果我删除错误代码
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)
答案 0 :(得分:0)
两个问题都与范围有关。
app
是两个脚本中的局部变量,仅存在于正在运行的脚本范围内(if __name__ == "__main__":
行)。
因此,如果您运行login.py,则app
在其作用域中可用,但是如果您运行register.py app
仅对其存在,而在login.py范围中则不存在(因为它从未创建“那里”)。
由于primaryScreen是静态函数,因此您无需引用该应用程序实例(无论如何,您都可以通过QtWidgets.QApplication.instance()
获得该引用):
只需将该行更改为:
screen = QtWidgets.QApplication.primaryScreen()
在第二个问题中,问题类似:由于您正在运行login.py,因此MainWindow_Register
从未在register.py中声明。
我还没有一个“简单”的解决方案,因为您的方法有点困惑。
首先,似乎您正在尝试从pyuic的输出开始使程序无效,如果是这种情况,则应避免使用:编写自己的代码,并按照{{3 }}。
然后,每当您必须面对多个相关窗口时,最好避免“递归”调用自己,而将单个窗口(或更好的是,一个单独的对象,甚至是QApplication的子类)用作“管理器”。这样可以通过编程使一切变得更容易,避免了冗余代码,同时减少了发生错误的可能性。
以您为例,您应该始终将登录窗口用作“起点”,然后在必要时显示一个注册器。