[英]pyqt5 how to open new window and reopen old
您好,我不知道該怎么做, window ( register.py ) 從login.py中打開得很好,但是 window ( login.py ) 自register.py后沒有打開。
該怎么辦?
注冊.py
https://hastebin.com/oyoxoyemak.rb
登錄.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)
這兩個問題都與 scope 有關。 app
是兩個腳本中的局部變量,僅存在於正在運行的腳本的 scope 中( if __name__ == "__main__":
行)。 因此,如果您運行 login.py,則app
在其 scope 中可用,但如果您運行 register.py app
僅針對它存在,而不在 login.py scope 中(因為它從未在“那里”創建)。
由於 primaryScreen 是 static function,因此您不需要對應用程序實例的引用(無論如何,您可以通過QtWidgets.QApplication.instance()
獲得):
只需將該行更改為:
screen = QtWidgets.QApplication.primaryScreen()
在第二個問題中,問題類似:由於您正在運行 login.py,因此從未在 register.py 中聲明MainWindow_Register
。
我沒有一個“簡單”的解決方案,因為你的方法有點混亂。
首先,您似乎正在嘗試從 pyuic 的 output 開始實施您的程序,如果是這種情況,您應該真正避免它:編寫自己的代碼並按照文檔中的建議使用 pyuic 生成的文件。
然后,每當你不得不面對多個相關的 windows 時,最好避免稱自己為“遞歸”,而使用單個 window(或者更好,一個單獨的 object 應用程序的子類)。 這將使一切以編程方式變得更容易,避免冗余代碼,同時減少錯誤的可能性。
在您的情況下,您可能應該始終使用登錄 window 作為“起點”,然后在必要時顯示寄存器。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.