pysimplegui之運行多個窗口


運行多個窗口

這就是 PySimpleGUI 繼續簡單的地方,但問題空間剛剛進入“復雜”領域。

如果您希望在事件循環中運行多個窗口,那么有兩種方法可以做到這一點。

  1. 當第二個窗口可見時,第一個窗口不保持活動狀態
  2. 第一個窗口保持活動狀態,而第二個窗口可見

您將在 GitHub(http://www.PySimpleGUI.com)的 Demo Program 區域中的 2 個演示程序中找到 2 個設計事項

非常重要 在創建新窗口時,您必須每次都使用“新”布局。您不能重復使用前一個窗口中的布局。結果,您將看到窗口 2 的布局是在更大的事件循環內定義的。

如果您有一個與窗口一起使用的窗口布局並且您已關閉該窗口,則您不能使用該窗口中的特定元素。layout每次創建新窗口時都必須重新創建變量。再讀一遍那句話……layout每次創建新窗口時,都必須重新創建變量。這意味着您應該有一個以 . 開頭的語句layout =很抱歉被困在這一點上,但是很多人似乎在遵循這個簡單的指令時遇到了麻煩。

窗口布局的黃金法則

你不應該重復使用 Windows 的布局......永遠!

或者更明確地說....

如果您正在調用,Window那么您應該在調用之前的語句中定義您的窗口布局Window

多窗口的演示程序

有幾個“演示程序”可以幫助您運行多個窗口。請下載這些程序並按照他們為您創建的示例進行操作。

以下是您在查看演示程序時會發現的一些代碼模式。

多窗口設計模式 1 - 兩個窗口都處於活動狀態

import PySimpleGUI as sg # Design pattern 2 - First window remains active layout = [[ sg.Text('Window 1'),], [sg.Input(do_not_clear=True)], [sg.Text(size=(15,1), key='-OUTPUT-')], [sg.Button('Launch 2'), sg.Button('Exit')]] win1 = sg.Window('Window 1', layout) win2_active = False while True: ev1, vals1 = win1.read(timeout=100) win1['-OUTPUT-'].update(vals1[0]) if ev1 == sg.WIN_CLOSED or ev1 == 'Exit': break if not win2_active and ev1 == 'Launch 2': win2_active = True layout2 = [[sg.Text('Window 2')], [sg.Button('Exit')]] win2 = sg.Window('Window 2', layout2) if win2_active: ev2, vals2 = win2.read(timeout=100) if ev2 == sg.WIN_CLOSED or ev2 == 'Exit': win2_active = False win2.close() 

多窗口設計模式 2 - 只有 1 個活動窗口

import PySimpleGUIQt as sg # Design pattern 1 - First window does not remain active layout = [[ sg.Text('Window 1'),], [sg.Input(do_not_clear=True)], [sg.Text(size=(15,1), key='-OUTPUT-')], [sg.Button('Launch 2')]] win1 = sg.Window('Window 1', layout) win2_active=False while True: ev1, vals1 = win1.read(timeout=100) if ev1 == sg.WIN_CLOSED: break win1.FindElement('-OUTPUT-').update(vals1[0]) if ev1 == 'Launch 2' and not win2_active: win2_active = True win1.Hide() layout2 = [[sg.Text('Window 2')], # note must create a layout from scratch every time. No reuse [sg.Button('Exit')]] win2 = sg.Window('Window 2', layout2) while True: ev2, vals2 = win2.read() if ev2 == sg.WIN_CLOSED or ev2 == 'Exit': win2.close() win2_active = False win1.UnHide() break


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM