pysimplegui之窗口大小,位子,主題等屬性修改


重點

1finalize()Window參數finalize=True

調用以強制窗口通過初始化的最后階段。這將導致 tkinter 資源被分配,以便它們可以被修改。這也會導致您的窗口出現。如果您不希望在調用 Finalize 時出現窗口,則在窗口的創建參數中將 Alpha 設置為 0。

如果你想調用一個元素的Update方法或調用一個Graph元素的繪圖圖元,你必須在調用之前調用Read或調用。Finalize

讀取(超時=無,超時鍵=TIMEOUT_KEY,關閉=假)

以阻塞方式讀取窗口的輸入值和按鈕點擊

返回事件、值。添加超時可以通過設置 timeout=讀取超時之前的毫秒數來實現,之后返回“超時事件”。timeout_key 的值將作為事件返回。如果您不指定超時鍵,則將TIMEOUT_KEY返回該值。

如果設置 timeout = 0,則 Read 將立即返回,而不是等待輸入或超時。這是對窗口的真正非阻塞“讀取”。

2窗口主題

3窗口大小

4無窗口標題

5阻塞

正文

如果您使用諸如PyCharm之類的 IDE,您會發現使用 PySimpleGUI 編寫代碼要容易得多向您顯示有關您正在進行的 API 調用的文檔的功能將幫助您確定要更改的設置(如果有)。在 PyCharm 中,有兩個命令特別有用。

Control-Q (when cursor is on function name) brings up a box with the function definition Control-P (when cursor inside function call "()") shows a list of parameters and their default values 

同步/異步窗口

PySimpleGUI 最常見的用途是顯示和收集來自用戶的信息。最直接的方法是使用“阻塞”GUI 調用。在等待用戶關閉 GUI 窗口/對話框時執行被“阻止”。

您已經在上面看到了許多使用阻塞窗口的示例。如果Read調用沒有超時參數,您會知道它會阻塞。

阻塞讀取(等待事件發生)如下所示:

event, values = window.read()

非阻塞/異步讀取調用如下所示:

event, values = window.read(timeout=100) 

您可以在本文檔末尾了解有關這些異步/非阻塞窗口的更多信息。

主題 - Windows 的自動着色

2019 年 12 月,該功能change_look_and_feeltheme這個概念保持不變,但一組新的函數調用使管理顏色和其他設置變得更加容易。

默認情況下,PySimpleGUI 顏色主題現在是Dark Blue 3“系統默認”灰色已經一去不復返了。如果您希望您的窗口沒有所有顏色,以便系統為您選擇顏色(灰色),則將主題設置為 'SystemDefault1' 或Default1.

有 130 個主題可用。您可以通過調用來預覽這些主題,theme_previewer()這將創建一個顯示所有可用顏色主題的大窗口。

在撰寫本文時,這些是您可用的主題。

SNAG-0620

默認為 Dark Blue 3

圖片

在 2019 年 12 月,所有 PySimpleGUI 窗口的默認設置從帶有藍色按鈕的系統灰色更改為使用帶有白色文本的灰藍色的更完整的主題。以前用戶被嘮叨選擇灰色以外的顏色主題。現在它已經為你完成了,而不是嘮叨你。

如果您正在為這種顏色主題而苦苦掙扎,請添加theme對更改它的調用。

主題名稱公式

您指定的主題名稱可能是“模糊的”。文本不必與您看到的打印內容完全匹配。例如“Dark Blue 3”和“DarkBlue3”和“dark blue 3”都可以。

快速確定窗口最佳設置的一種方法是使用許多不同的主題簡單地顯示窗口。添加設置主題的代碼行 - theme('Dark Green 1'),運行您的代碼,看看是否喜歡它,如果不喜歡,請將主題字符串更改為並重'Dark Green 2'試。重復,直到你找到你喜歡的東西。

字符串的“公式”是:

Dark Color #

或者

Light Color #

顏色可以是藍色、綠色、黑色、灰色、紫色、棕色、藍綠色、紅色。# 是可選的,或者可以是從 1 到 XX。有些顏色有很多選擇。例如,有 13 個“淺棕色”選項。

“系統”默認值 - 無顏色

如果您一心想在窗口中完全沒有顏色,請選擇Default 1System Default 1

如果你想要一個藍色按鈕的原始 PySimpleGUI 配色方案,而其他一切都是灰色的,那么你可以使用主題DefaultSystem Default.

主題功能

基本的主題函數調用是theme(theme_name)這設定了主題。不帶參數調用,theme()將返回當前主題的名稱。

如果您想獲取或修改任何主題設置,您可以使用這些功能來完成,您可以在文檔底部的功能定義部分找到有關這些功能的詳細信息。如果不使用參數,每個都將返回當前值。

theme_background_color
theme_border_width
theme_button_color
theme_element_background_color
theme_element_text_color
theme_input_background_color
theme_input_text_color
theme_progress_bar_border_width
theme_progress_bar_color
theme_slider_border_width
theme_slider_color
theme_text_color

這些將幫助您獲得可用選擇的列表。

theme_list
theme_previewer

窗口對象 - 開始一個窗口

第一步是使用所需的窗口自定義創建窗口對象。

) 注意 - 從 PySimpleGUI 4.25.0 開始支持模態窗口!默認情況下popup,阻塞的窗口將默認標記為模態。這是一個有點冒險的更改,因為您現有的應用程序的行為會有所不同。但是,理論上,當彈出窗口處於活動狀態時,您不應該與其他窗口進行交互。所有這些動作充其量都是排隊的。它依賴於實現。

在這種情況下,“模態”意味着您必須關閉此“模態”窗口,然后才能與在此窗口之前創建的窗口進行交互。考慮一個“關於”框。在大多數程序中,您通常必須關閉這個小彈出窗口。所以,這就是 PySimpleGUI 現在正在做的事情。

使您的窗口模態化

要制作模態 Wio=now,您有 2 個選項。

  1. moodel=True在 Window 調用中設置參數。

  2. 調用該方法Window.make_modal()將窗口從非模態變為模態。沒有模態到非模態。看不出需要一個。如果有人出現,當然!

禁用模式窗口

阻止的彈出窗口是唯一默認打開模式的窗口。有一個模態參數,您可以將其設置為 False 以將其關閉。

對於 PySimpleGUI 4.25.0 之前的版本和其他端口 PySimpleGUI 中沒有對“模態窗口”的直接支持。除非您手動更改窗口的設置,否則所有窗口都可以隨時訪問。

重要- 許多Window方法要求您在調用方法之前調用Window.readWindow.Finalize(或finalize=TrueWindow調用中設置)。這是因為這兩個調用實際上是使用底層 GUI 框架創建窗口的。在其中一個調用之前,這些方法可能會崩潰,因為它們還沒有創建其底層小部件。

窗口位置

PySimpleGUI 計算窗口的精確中心並將窗口居中在屏幕上。如果您想將窗口定位到其他位置,例如系統默認值 (0,0),如果您有 2 種方法可以做到這一點。第一個是創建窗口的時候。使用location參數設置窗口所在的位置。第二種方法是使用SetOptions調用,它將為將來的所有窗口設置默認窗口位置。

多顯示器和 Linux

如果您在 Linux 系統上有多個監視器,則 PySimpleGUI 窗口的自動居中(默認)位置可能不正確。在 Windows 上,多個監視器似乎可以作為 tkinter 使用和報告的主要監視器工作。

location多顯示器的 Linux 用戶在使用默認位置運行時出現問題,需要通過設置參數來指定在創建窗口時應該放置窗口的位置。

窗口大小

您可以通過訪問該Size屬性來獲取窗口的大小。必須讀取一次或完成窗口才能使值正確。請注意,它是一個屬性,而不是一個調用。

my_windows_size = window.Size

要完成您的窗口:

window = Window('My Title', layout, finalize=True) 

元素尺寸

有多種方法可以設置元素的大小。他們是:

  1. 全局默認大小 - 使用SetOptions函數更改
  2. 在窗口級別 - 使用default_element_size調用中的參數更改Window
  3. 在元素級別 - 每個元素都有一個size參數

元素大小以字符為單位(有例外)。文本元素 size = (20,1)的大小為 20 個字符寬 x 1 個字符高。

PySimpleGUI 的默認元素大小是(45,1).

有幾個小部件,其中一個大小值以像素而不是字符為單位。進度表和滑塊也是如此。第二個參數是以像素為單位的“高度”。

沒有標題欄

如果您希望創建沒有窗口標題欄的干凈的漂亮窗口,請在創建窗口時使用 no_titlebar 選項。

確保為您的用戶提供“退出”按鈕,否則他們將無法關閉窗口!當沒有啟用標題欄時,窗口的任務欄上將沒有圖標。如果沒有退出按鈕,您將需要通過任務管理器殺死......不好玩。

沒有標題欄的窗口依賴於啟用任意位置選項,否則您將無法移動窗口。

沒有標題欄的 Windows 可用於輕松創建浮動啟動器。

Linux 用戶!請注意,此設置對其他一些元素有副作用。多行輸入根本不起作用,例如所以,謹慎使用。

浮動發射器

隨處抓取

這是 PySimpleGUI 獨有的功能。

注意 - 如果用戶使用啟用了 grab_anywhere 的按鈕關閉非阻塞窗口,則會打印出一條警告消息。這些消息沒有害處,但可能會讓用戶感到痛苦。如果您希望啟用非阻塞窗口,只需在創建窗口時獲取 grab_anywhere = True。

總在最前面

要將窗口保持在屏幕上所有其他窗口的頂部,請在創建窗口時設置 keep_on_top = True。此功能使浮動工具欄非常有用並且在您的桌面上始終可見。

重點

PySimpleGUI 將為您設置默認焦點位置。這通常意味着第一個輸入字段。您可以將焦點設置到特定元素。use_default_focus=False如果您要自己設置焦點,則應通過在 Window 調用中設置來關閉自動焦點。

TTK 按鈕

從 4.7.0 版開始,PySimpleGUI 支持“普通”tk 按鈕和 ttk 按鈕。需要進行此更改,以便 Mac 用戶可以在其按鈕上使用顏色。當您嘗試更改按鈕顏色時,有一個錯誤會導致 tk 按鈕不顯示文本。請注意,如果您從官方 Python.org 站點而不是使用 Homebrew 安裝 Python,這個問題就會消失。許多用戶已經切換並且非常高興,因為切換后甚至 tk 按鈕都可以在 Mac 上運行。

默認情況下,當使用 Button Element 時,Mac 用戶將獲得 ttk Buttons。所有其他平台將獲得一個正常的 tk 按鈕。有一些方法可以覆蓋此行為。use_ttk_buttons一種是在創建窗口時使用參數。如果設置為 True,則所有按鈕都將是窗口中的 ttk 按鈕。如果設置為 False,則所有按鈕都是普通的 tk 按鈕。如果未設置,則平台或按鈕元素確定使用哪個。

如果需要系統范圍的設置,則可以使用 設置默認值set_options這將影響所有窗口,例如彈出窗口和調試窗口。

TTK 主題

tkinter 有許多可以與 ttk 小部件一起使用的“主題”。在 PySimpleGUI 中,這些小部件包括 - Table、Tree、Combobox、Button、ProgressBar、Tabs & TabGroups。一些元素有一個“主題”參數,但這些不再使用,應該被忽略。PySimpleGUI 的初始版本試圖在單個窗口中混合主題,但由於了解到這是不可能的,因此它被設置在窗口或系統級別。

如果需要系統范圍的設置,則可以使用 設置默認值set_options這將影響所有窗口,例如彈出窗口和調試窗口。

ttk 主題選擇取決於平台。Linux 的選擇數量少於 Windows。這些是 Windows 選項:'default'、'winnative'、'clam'、'alt'、'classic'、'vista'、'xpnative'

定義了一些常量來幫助您完成代碼以確定您的選擇。主題常量以THEME_例如,“蛤”主題是THEME_CLAM

建議您嘗試使用此設置來確定您最喜歡哪個設置。他們以微妙但仍然重要的方式改變了基於 ttk 的元素。

關閉窗口

當您完全完成一個窗口時,您應該關閉它然后刪除它,以便正確清理資源,特別是 tkinter 資源。

如果您希望在 1 行代碼中執行此操作,請執行以下操作:

window.close(); del window 

刪除有助於解決多線程應用程序遇到的問題,其中 tkinter 抱怨它是從錯誤的線程(不是程序的主線程)調用的

完成窗口形成的窗口方法

完成布局后,存儲在layout這些示例中調用的變量中,您將創建窗口。

窗口的創建部分涉及 3 個步驟。

  1. 創建一個Window對象
  2. 將布局添加到窗口
  3. Read可選 - 如果想在調用之前進行更改,請完成

隨着時間的推移,PySimpleGUI 代碼繼續壓縮、壓縮,因此程序員需要編寫盡可能少的代碼。

個別電話

這是“長形式”,因為每個方法都是單獨調用的。

window = sg.Window('My Title') window.layout(layout) window.finalize() 

鏈接調用(舊方法)

完成的下一級壓縮是將調用鏈接到一行代碼中。

window = sg.Window('My Title').Layout(layout).finalize() 

使用參數而不是調用(新的首選方法)

這是一個新穎的概念,而不是使用鏈接,對初學者來說是陌生的,而是使用參數來Window調用。這正是 PySimpleGUI 端口 4.2 發生的情況。

window = sg.Window('My Title', layout, finalize=True) 

與其將工作推給執行布局和完成調用的用戶,不如讓 Window 初始化代碼為您完成。是的,現在聽起來很明顯,但幾個月前還沒有。

此功能已添加到所有 4 個 PySimpleGUI 端口,但 PyPI 上還沒有一個,因為首先需要一些運行時來確保不會發生真正的壞事。

調用設置窗口布局。必須在 之前調用Read最有可能與 Window 創建“鏈接”。

window = sg.Window('My window title', layout)

 


免責聲明!

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



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