簡體   English   中英

pyqt5 如何打開新 window 並重新打開舊

[英]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)

錯誤代碼 2

這兩個問題都與 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM