真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

如何使用PySimpleGUI為程序和腳本增加GUI

這篇文章將為大家詳細(xì)講解有關(guān)如何使用PySimpleGUI為程序和腳本增加GUI,小編覺(jué)得挺實(shí)用的,因此分享給大家做個(gè)參考,希望大家閱讀完這篇文章后可以有所收獲。

站在用戶的角度思考問(wèn)題,與客戶深入溝通,找到喀左網(wǎng)站設(shè)計(jì)與喀左網(wǎng)站推廣的解決方案,憑借多年的經(jīng)驗(yàn),讓設(shè)計(jì)與互聯(lián)網(wǎng)技術(shù)結(jié)合,創(chuàng)造個(gè)性化、用戶體驗(yàn)好的作品,建站類型包括:成都網(wǎng)站設(shè)計(jì)、成都網(wǎng)站建設(shè)、外貿(mào)網(wǎng)站建設(shè)、企業(yè)官網(wǎng)、英文網(wǎng)站、手機(jī)端網(wǎng)站、網(wǎng)站推廣、國(guó)際域名空間、虛擬主機(jī)、企業(yè)郵箱。業(yè)務(wù)覆蓋喀左地區(qū)。

對(duì)于 .exe 類型的程序文件,我們可以通過(guò)雙擊鼠標(biāo)左鍵打開(kāi);但對(duì)于 .py 類型的 Python 程序,幾乎不會(huì)有人嘗試同樣的操作。對(duì)于一個(gè)(非程序員類型的)典型用戶,他們雙擊打開(kāi) .exe 文件時(shí)預(yù)期彈出一個(gè)可以交互的窗體?;?Tkinter,可以通過(guò)標(biāo)準(zhǔn) Python 安裝standard Python installations的方式提供 GUI,但很多程序都不太可能這樣做。

如果打開(kāi) Python 程序并進(jìn)入 GUI 界面變得如此容易,以至于真正的初學(xué)者也可以掌握,會(huì)怎樣呢?會(huì)有人感興趣并使用嗎?這個(gè)問(wèn)題不好回答,因?yàn)橹钡浇裉靹?chuàng)建自定義 GUI 布局仍不是件容易的事情。

在為程序或腳本增加 GUI 這件事上,似乎存在能力的“錯(cuò)配”。(缺乏這方面能力的)真正的初學(xué)者被迫只能使用命令行方式,而很多(具備這方面能力的)高級(jí)程序員卻不愿意花時(shí)間創(chuàng)建一個(gè) Tkinter GUI。

GUI 框架

Python 的 GUI 框架并不少,其中 Tkinter,wxPython,Qt 和 Kivy 是幾種比較主流的框架。此外,還有不少在上述框架基礎(chǔ)上封裝的簡(jiǎn)化框架,例如 EasyGUI,PyGUI 和 Pyforms 等。

但問(wèn)題在于,對(duì)于初學(xué)者(這里是指編程經(jīng)驗(yàn)不超過(guò) 6 個(gè)月的用戶)而言,即使是最簡(jiǎn)單的主流框架,他們也無(wú)從下手;他們也可以選擇封裝過(guò)的(簡(jiǎn)化)框架,但仍難以甚至無(wú)法創(chuàng)建自定義 GUI布局layout。即便學(xué)會(huì)了某種(簡(jiǎn)化)框架,也需要編寫連篇累牘的代碼。

PySimpleGUI 嘗試解決上述 GUI 難題,它提供了一種簡(jiǎn)單明了、易于理解、方便自定義的 GUI 接口。如果使用 PySimpleGUI,很多復(fù)雜的 GUI 也僅需不到 20 行代碼。

秘訣

PySimpleGUI 極為適合初學(xué)者的秘訣在于,它已經(jīng)包含了絕大多數(shù)原本需要用戶編寫的代碼。PySimpleGUI 會(huì)處理按鈕回調(diào)callback,無(wú)需用戶編寫代碼。對(duì)于初學(xué)者,在幾周內(nèi)掌握函數(shù)的概念已經(jīng)不容易了,要求其理解回調(diào)函數(shù)似乎有些強(qiáng)人所難。

在大部分 GUI 框架中,布局 GUI小部件widgets通常需要寫一些代碼,每個(gè)小部件至少 1-2 行。PySimpleGUI 使用了 “auto-packer” 技術(shù),可以自動(dòng)創(chuàng)建布局。因而,布局 GUI 窗口不再需要 pack 或 grid 系統(tǒng)。

(LCTT 譯注:這里提到的 pack 和 grid 都是 Tkinter 的布局管理器,另外一種叫做 place 。)

***,PySimpleGUI 框架編寫中有效地利用了 Python 語(yǔ)言特性,降低用戶代碼量并簡(jiǎn)化 GUI 數(shù)據(jù)返回的方式。在窗體form布局中創(chuàng)建小部件時(shí),小部件會(huì)被部署到對(duì)應(yīng)的布局中,無(wú)需額外的代碼。

GUI 是什么?

絕大多數(shù) GUI 只完成一件事情:收集用戶數(shù)據(jù)并返回。在程序員看來(lái),可以歸納為如下的函數(shù)調(diào)用:

button, values = GUI_Display(gui_layout)

絕大多數(shù) GUI 支持的用戶行為包括鼠標(biāo)點(diǎn)擊(例如,“確認(rèn)”,“取消”,“保存”,“是”和“否”等)和內(nèi)容輸入。GUI 本質(zhì)上可以歸結(jié)為一行代碼。

這也正是 PySimpleGUI (的簡(jiǎn)單 GUI 模式)的工作原理。當(dāng)執(zhí)行命令顯示 GUI 后,除非點(diǎn)擊鼠標(biāo)關(guān)閉窗體,否則不會(huì)執(zhí)行任何代碼。

當(dāng)然還有更復(fù)雜的 GUI,其中鼠標(biāo)點(diǎn)擊后窗口并不關(guān)閉;例如,機(jī)器人的遠(yuǎn)程控制界面,聊天窗口等。這類復(fù)雜的窗體也可以用 PySimpleGUI 創(chuàng)建。

快速創(chuàng)建 GUI

PySimpleGUI 什么時(shí)候有用呢?顯然,是你需要 GUI 的時(shí)候。僅需不超過(guò) 5 分鐘,就可以讓你創(chuàng)建并嘗試 GUI。最便捷的 GUI 創(chuàng)建方式就是從 PySimpleGUI 經(jīng)典實(shí)例中拷貝一份代碼。具體操作流程如下:

  • 找到一個(gè)與你需求最接近的 GUI

  • 從經(jīng)典實(shí)例中拷貝代碼

  • 粘貼到 IDE 中并運(yùn)行

下面我們看一下書中的***個(gè)經(jīng)典實(shí)例recipe

import PySimpleGUI as sg # Very basic form.  Return values as a listform = sg.FlexForm('Simple data entry form')  # begin with a blank form layout = [          [sg.Text('Please enter your Name, Address, Phone')],          [sg.Text('Name', size=(15, 1)), sg.InputText('name')],          [sg.Text('Address', size=(15, 1)), sg.InputText('address')],          [sg.Text('Phone', size=(15, 1)), sg.InputText('phone')],          [sg.Submit(), sg.Cancel()]         ] button, values = form.LayoutAndRead(layout) print(button, values[0], values[1], values[2])

運(yùn)行后會(huì)打開(kāi)一個(gè)大小適中的窗體。

如何使用PySimpleGUI為程序和腳本增加GUI

如果你只是想收集一些字符串類型的值,拷貝上述經(jīng)典實(shí)例中的代碼,稍作修改即可滿足你的需求。

你甚至可以只用 5 行代碼創(chuàng)建一個(gè)自定義 GUI 布局。

import PySimpleGUI as sg form = sg.FlexForm('My first GUI') layout = [ [sg.Text('Enter your name'), sg.InputText()],           [sg.OK()] ] button, (name,) = form.LayoutAndRead(layout)

如何使用PySimpleGUI為程序和腳本增加GUI

5 分鐘內(nèi)創(chuàng)建一個(gè)自定義 GUI

在簡(jiǎn)單布局的基礎(chǔ)上,通過(guò)修改經(jīng)典實(shí)例中的代碼,5 分鐘內(nèi)即可使用 PySimpleGUI 創(chuàng)建自定義布局。

在 PySimpleGUI 中,小部件widgets被稱為元素elements。元素的名稱與編碼中使用的名稱保持一致。

(LCTT 譯注:Tkinter 中使用小部件這個(gè)詞)

核心元素
TextInputTextMultilineInputComboListboxRadioCheckboxSpinOutputSimpleButtonRealtimeButtonReadFormButtonProgressBarImageSliderColumn
元素簡(jiǎn)寫

PySimpleGUI 還包含兩種元素簡(jiǎn)寫方式。一種是元素類型名稱簡(jiǎn)寫,例如 T 用作 Text 的簡(jiǎn)寫;另一種是元素參數(shù)被配置了默認(rèn)值,你可以無(wú)需指定所有參數(shù),例如 Submit 按鈕默認(rèn)的文本就是 “Submit”。

T = TextTxt = TextIn = InputTextInput = IntputTextCombo = InputComboDropDown = InputComboDrop = InputCombo

(LCTT 譯注:***種簡(jiǎn)寫就是 Python 類的別名,第二種簡(jiǎn)寫是在返回元素對(duì)象的 Python 函數(shù)定義時(shí)指定了參數(shù)的默認(rèn)值)

按鈕簡(jiǎn)寫

一些通用按鈕具有簡(jiǎn)寫實(shí)現(xiàn),包括:

FolderBrowseFileBrowseFileSaveAsSaveSubmitOKOk (LCTT 譯注:這里 `k` 是小寫)CancelQuitExitYesNo

此外,還有通用按鈕功能對(duì)應(yīng)的簡(jiǎn)寫:

SimpleButtonReadFormButtonRealtimeButton

(LCTT 譯注:其實(shí)就是返回 Button 類實(shí)例的函數(shù))

上面就是 PySimpleGUI 支持的全部元素。如果不在上述列表之中,就不會(huì)在你的窗口布局中生效。

(LCTT 譯注:上述都是 PySimpleGUI 的類名、類別名或返回實(shí)例的函數(shù),自然只能使用列表內(nèi)的。)

GUI 設(shè)計(jì)模式

對(duì)于 GUI 程序,創(chuàng)建并展示窗口的調(diào)用大同小異,差異在于元素的布局。

設(shè)計(jì)模式代碼與上面的例子基本一致,只是移除了布局:

import PySimpleGUI as sg form = sg.FlexForm('Simple data entry form')# Define your form here (it's a list of lists)button, values = form.LayoutAndRead(layout)

(LCTT 譯注:這段代碼無(wú)法運(yùn)行,只是為了說(shuō)明每個(gè)程序都會(huì)用到的設(shè)計(jì)模式。)

對(duì)于絕大多數(shù) GUI,編碼流程如下:

  • 創(chuàng)建窗體對(duì)象

  • 以“列表的列表”的形式定義 GUI

  • 展示 GUI 并獲取元素的值

上述流程與 PySimpleGUI 設(shè)計(jì)模式部分的代碼一一對(duì)應(yīng)。

GUI 布局

要?jiǎng)?chuàng)建自定義 GUI,首先要將窗體分割成多個(gè)行,因?yàn)榇绑w是一行一行定義的。然后,在每一行中從左到右依次放置元素。

我們得到的就是一個(gè)“列表的列表”,類似如下:

layout = [  [Text('Row 1')],            [Text('Row 2'), Checkbox('Checkbox 1', OK()), Checkbox('Checkbox 2'), OK()] ]

上述布局對(duì)應(yīng)的效果如下:

如何使用PySimpleGUI為程序和腳本增加GUI

展示 GUI

當(dāng)你完成布局、拷貝完用于創(chuàng)建和展示窗體的代碼后,下一步就是展示窗體并收集用戶數(shù)據(jù)。

下面這行代碼用于展示窗體并返回收集的數(shù)據(jù):

button, values = form.LayoutAndRead(layout)

窗體返回的結(jié)果由兩部分組成:一部分是被點(diǎn)擊按鈕的名稱,另一部分是一個(gè)列表,包含所有用戶輸入窗體的值。

在這個(gè)例子中,窗體顯示后用戶直接點(diǎn)擊 “OK” 按鈕,返回的結(jié)果如下:

button == 'OK'values == [False, False]

Checkbox 類型元素返回 TrueFalse 類型的值。由于默認(rèn)處于未選中狀態(tài),兩個(gè)元素的值都是 False。

顯示元素的值

一旦從 GUI 獲取返回值,檢查返回變量中的值是個(gè)不錯(cuò)的想法。與其使用 print 語(yǔ)句進(jìn)行打印,我們不妨堅(jiān)持使用 GUI 并在一個(gè)窗口中輸出這些值。

(LCTT 譯注:考慮使用的是 Python 3 版本,print 應(yīng)該是函數(shù)而不是語(yǔ)句。)

在 PySimpleGUI 中,有多種消息框可供選取。傳遞給消息框(函數(shù))的數(shù)據(jù)會(huì)被顯示在消息框中;函數(shù)可以接受任意數(shù)目的參數(shù),你可以輕松的將所有要查看的變量展示出來(lái)。

在 PySimpleGUI 中,最常用的消息框是 MsgBox。要展示上面例子中的數(shù)據(jù),只需編寫一行代碼:

MsgBox('The GUI returned:', button, values)

整合

好了,你已經(jīng)了解了基礎(chǔ)知識(shí),讓我們創(chuàng)建一個(gè)包含盡可能多 PySimpleGUI 元素的窗體吧!此外,為了更好的感觀效果,我們將采用綠色/棕褐色的配色方案。

import PySimpleGUI as sg sg.ChangeLookAndFeel('GreenTan') form = sg.FlexForm('Everything bagel', default_element_size=(40, 1)) column1 = [[sg.Text('Column 1', background_color='#d3dfda', justification='center', size=(10,1))],           [sg.Spin(values=('Spin Box 1', '2', '3'), initial_value='Spin Box 1')],           [sg.Spin(values=('Spin Box 1', '2', '3'), initial_value='Spin Box 2')],           [sg.Spin(values=('Spin Box 1', '2', '3'), initial_value='Spin Box 3')]]layout = [    [sg.Text('All graphic widgets in one form!', size=(30, 1), font=("Helvetica", 25))],    [sg.Text('Here is some text.... and a place to enter text')],    [sg.InputText('This is my text')],    [sg.Checkbox('My first checkbox!'), sg.Checkbox('My second checkbox!', default=True)],    [sg.Radio('My first Radio!     ', "RADIO1", default=True), sg.Radio('My second Radio!', "RADIO1")],    [sg.Multiline(default_text='This is the default Text should you decide not to type anything', size=(35, 3)),     sg.Multiline(default_text='A second multi-line', size=(35, 3))],    [sg.InputCombo(('Combobox 1', 'Combobox 2'), size=(20, 3)),     sg.Slider(range=(1, 100), orientation='h', size=(34, 20), default_value=85)],    [sg.Listbox(values=('Listbox 1', 'Listbox 2', 'Listbox 3'), size=(30, 3)),     sg.Slider(range=(1, 100), orientation='v', size=(5, 20), default_value=25),     sg.Slider(range=(1, 100), orientation='v', size=(5, 20), default_value=75),     sg.Slider(range=(1, 100), orientation='v', size=(5, 20), default_value=10),     sg.Column(column1, background_color='#d3dfda')],    [sg.Text('_'  * 80)],    [sg.Text('Choose A Folder', size=(35, 1))],    [sg.Text('Your Folder', size=(15, 1), auto_size_text=False, justification='right'),     sg.InputText('Default Folder'), sg.FolderBrowse()],    [sg.Submit(), sg.Cancel()]     ] button, values = form.LayoutAndRead(layout)sg.MsgBox(button, values)

看上面要寫不少代碼,但如果你試著直接使用 Tkinter 框架實(shí)現(xiàn)同樣的 GUI,你很快就會(huì)發(fā)現(xiàn) PySimpleGUI 版本的代碼是多么的簡(jiǎn)潔。

如何使用PySimpleGUI為程序和腳本增加GUI

代碼的***一行打開(kāi)了一個(gè)消息框,效果如下:

如何使用PySimpleGUI為程序和腳本增加GUI

消息框函數(shù)中的每一個(gè)參數(shù)的內(nèi)容都會(huì)被打印到單獨(dú)的行中。本例的消息框中包含兩行,其中第二行非常長(zhǎng)而且包含列表嵌套。

建議花一點(diǎn)時(shí)間將上述結(jié)果與 GUI 中的元素一一比對(duì),這樣可以更好的理解這些結(jié)果是如何產(chǎn)生的。

為你的程序或腳本添加 GUI

如果你有一個(gè)命令行方式使用的腳本,添加 GUI 不一定意味著完全放棄該腳本。一種簡(jiǎn)單的方案如下:如果腳本不需要命令行參數(shù),那么可以直接使用 GUI 調(diào)用該腳本;反之,就按原來(lái)的方式運(yùn)行腳本。

僅需類似如下的邏輯:

if len(sys.argv) == 1:        # collect arguments from GUIelse:    # collect arguements from sys.argv

創(chuàng)建并運(yùn)行 GUI 最便捷的方式就是從 PySimpleGUI 經(jīng)典實(shí)例中拷貝一份代碼并修改。

快來(lái)試試吧!給你一直疲于手動(dòng)執(zhí)行的腳本增加一些趣味。只需 5-10 分鐘即可玩轉(zhuǎn)示例腳本。你可能發(fā)現(xiàn)一個(gè)幾乎滿足你需求的經(jīng)典實(shí)例;如果找不到,也很容易自己編寫一個(gè)。即使你真的玩不轉(zhuǎn),也只是浪費(fèi)了 5-10 分鐘而已。

資源

安裝方式

支持 Tkinter 的系統(tǒng)就支持 PySimpleGUI,甚至包括樹莓派Raspberry Pi,但你需要使用 Python 3。

pip install PySimpleGUI

關(guān)于“如何使用PySimpleGUI為程序和腳本增加GUI”這篇文章就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,使各位可以學(xué)到更多知識(shí),如果覺(jué)得文章不錯(cuò),請(qǐng)把它分享出去讓更多的人看到。


文章標(biāo)題:如何使用PySimpleGUI為程序和腳本增加GUI
網(wǎng)站URL:http://weahome.cn/article/iishji.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部