自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

用PySimpleGUI輕松為程序和腳本添加GUI

譯文
開發(fā)
很少有人通過像雙擊.exe文件那樣雙擊.py文件來運(yùn)行Python程序。普通用戶(非程序員)雙擊.exe文件時(shí),認(rèn)為應(yīng)該彈出可與之交互的窗口。雖然可以使用tkinter借助標(biāo)準(zhǔn)的Python安裝來創(chuàng)建GUI,但是許多程序不太可能這樣。

[[242548]]

【51CTO.com快譯】很少有人通過像雙擊.exe文件那樣雙擊.py文件來運(yùn)行Python程序。普通用戶(非程序員)雙擊.exe文件時(shí),認(rèn)為應(yīng)該彈出可與之交互的窗口。雖然可以使用tkinter借助標(biāo)準(zhǔn)的Python安裝來創(chuàng)建GUI,但是許多程序不太可能這樣。

1.GUI框架

市面上不缺面向Python的GUI框架。Tkinter、WxPython、Qt和Kivy是幾個(gè)主要的軟件包。此外,還有大量簡化版GUI軟件包可“包裝”其中一個(gè)主要軟件包,包括EasyGUI、PyGUI和Pyforms。

問題是,初學(xué)者連最簡單的主要軟件包都學(xué)不會(huì)。這使得包裝程序包成為一種潛在的選擇,但對(duì)于大多數(shù)新用戶來說,構(gòu)建自定義GUI布局依然很困難或不可能。即便可能,包裝程序包也仍需要編一頁頁代碼。

PySimpleGUI(https://github.com/MikeTheWatchGuy/PySimpleGUI)試圖通過為GUI提供一種超級(jí)簡單、易于理解且易于定制的界面來克服這些GUI挑戰(zhàn)。若使用PySimpleGUI,連許多復(fù)雜的GUI也用不了20行代碼。

2.秘密

PySimpleGUI非常適合新手的原因是,該軟件包含有用戶通常需要編寫的大部分代碼。處理按鈕回調(diào)的是PySimpleGUI,而不是用戶的代碼。初學(xué)者很難掌握函數(shù)這個(gè)概念,要求他們在頭幾周理解回調(diào)函數(shù)確實(shí)勉為其難。

就大多數(shù)GUI而言,安排GUI窗口組件通常需要幾行代碼,每個(gè)窗口組件至少一兩行。 PySimpleGUI使用自動(dòng)創(chuàng)建布局的“自動(dòng)打包程序”。布局GUI窗口無需pack或grid系統(tǒng)。

最后,PySimpleGUI以巧妙的方式利用Python語言構(gòu)件,減少代碼數(shù)量,簡單直觀地返回GUI數(shù)據(jù)。用表單布局創(chuàng)建窗口組件時(shí),它已配置到位,無需編寫多行代碼。

3.GUI是什么?

大多數(shù)GUI做一件事:從用戶處收集信息并返回信息。從程序員的角度來看,這可以概括為函數(shù)調(diào)用,如下所示:

button, values = GUI_Display(gui_layout)

大多數(shù)GUI需要用戶點(diǎn)擊的按鈕(比如,確定、取消、保存、是或不等)以及用戶輸入的值。GUI的本質(zhì)可以歸結(jié)為一行代碼。

這正是PySimpleGUI的工作原理(對(duì)于簡單的GUI而言)。調(diào)用以顯示GUI時(shí),在點(diǎn)擊關(guān)閉表單的按鈕之前不執(zhí)行任何操作。

有些較復(fù)雜的GUI,比如點(diǎn)擊按鈕后不關(guān)閉的GUI。包括面向機(jī)器人的遠(yuǎn)程控制界面和聊天窗口。這些復(fù)雜的表單也可以用PySimpleGUI來創(chuàng)建。

4.快速創(chuàng)建GUI

PySimpleGUI何時(shí)有用?只要你需要GUI就有用。創(chuàng)建和嘗試GUI用不了5分鐘。創(chuàng)建GUI的最快方法是從PySimpleGUI Cookbook(https://pysimplegui.readthedocs.io/en/latest/cookbook/)復(fù)制一個(gè)。遵照這些步驟:

  • 找到類似你想創(chuàng)建的GUI的一個(gè)GUI。
  • 從Cookbook復(fù)制代碼。
  • 粘貼到你的IDE,并運(yùn)行。

不妨看看來自Cookbook的第一個(gè)recipe。

 

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

 

它是大小合適的表單。 

圖1:PySimpleGUI數(shù)據(jù)輸入表單

如果你只需要收集幾個(gè)值,它們又都是字符串,可以復(fù)制這個(gè)recipe,根據(jù)你的要求來修改。

你甚至可以僅用5行代碼來創(chuàng)建自定義GUI布局。

 

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

圖2:僅用5行代碼的PySimpleGUI表單

5.5分鐘內(nèi)創(chuàng)建自定義GUI

如果你有簡單的布局,應(yīng)該用不了5分鐘,就能夠用PySimpleGUI創(chuàng)建自定義布局,只要修改來自Cookbook的代碼。

窗口組件在PySimpleGUI中名為元素。這些元素就是你輸入到Python代碼中的,注意拼寫。

核心元素

Text

InputText

Multiline

InputCombo

Listbox

Radio

Checkbox

Spin

Output

SimpleButton

RealtimeButton

ReadFormButton

ProgressBar

Image

Slider

Column

快捷方式列表

PySimpleGUI還有兩種元素快捷方式。一種就是一模一樣的元素的其他名稱(比如T代替Text)。第二種為元素配置某個(gè)特定的設(shè)置,那樣不必指定所有參數(shù)(比如Submit是上面有文本“Submit”的按鈕)。 

T = Text

Txt = Text

In = InputText

Input = IntputText

Combo = InputCombo

DropDown = InputCombo

Drop = InputCombo

按鈕快捷方式

許多常用按鈕已被實(shí)施成快捷方式。這包括:

FolderBrowse

FileBrowse

FileSaveAs

Save

Submit

OK

Ok

Cancel

Quit

Exit

Yes

No

還有針對(duì)更一般的按鈕功能的快捷方式。

SimpleButton

ReadFormButton

RealtimeButton

這些都是你可以在PySimpleGUI中選擇的GUI窗口組件。如果某個(gè)不在這些列表上,它不會(huì)進(jìn)入表單布局。

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

GUI中往往不變的元素是創(chuàng)建和顯示窗口的調(diào)用。元素的布局因程序而異。

下面是上述例子的代碼,布局已去除:

 

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

 

大多數(shù)GUI的流程如下:

  • 創(chuàng)建表單對(duì)象
  • 將GUI定義成列表清單
  • 顯示GUI,獲得結(jié)果

7.GUI布局

想創(chuàng)建自定義GUI,先將表單細(xì)分成幾行,因?yàn)楸韱蚊看味x一行。然后將一個(gè)元素放在另一個(gè)后面,按從左到右的順序。

結(jié)果是看起來是這樣的“列表清單”:

 

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

 

這個(gè)布局生成這個(gè)窗口: 

圖3:PySimpleGUI自定義數(shù)據(jù)輸入表單

8.顯示GUI

一旦完成了布局,并復(fù)制了創(chuàng)建和顯示表單的代碼行,現(xiàn)在可以顯示表單,并從用戶處獲得值。

這行代碼顯示表單并提供結(jié)果:

 

  1. button, values = form.LayoutAndRead(layout) 

表單返回兩個(gè)值:所點(diǎn)擊按鈕的文本和用戶輸入到表單的值列表。

如果示例表單已顯示,用戶只是點(diǎn)擊了“確定”按鈕,結(jié)果會(huì)是如此:

 

  1. button == 'OK'  
  2. values == [FalseFalse

 

復(fù)選框元素返回True或False的值。由于復(fù)選框默認(rèn)情況下未勾選,返回的兩個(gè)值都是False。

9.顯示結(jié)果

一旦你有了來自GUI的值,可以核實(shí)變量中有什么值。不是使用print語言將它們輸出,不妨堅(jiān)持使用GUI、將數(shù)據(jù)輸出到窗口。

PySimpleGUI有好多消息框可供選擇。傳遞到消息框的數(shù)據(jù)在窗口中顯示。該函數(shù)接受眾多變量。你只要表明想在調(diào)用中看到的所有變量。

PySimpleGUI中最常用的消息框是MsgBox。為了顯示前一個(gè)示例的結(jié)果,編寫:

 

  1. MsgBox('The GUI returned:', button, values

10.統(tǒng)統(tǒng)組合起來

你已知道了基本面,不妨組建一個(gè)含有PySimpleGUI盡可能多元素的表單。另外為了有漂亮的外觀,我們將“look and feel”改成綠色和棕黃色顏色方案。

 

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

 

看起來代碼好多,但是試著直接用tkinter編寫同樣的GUI布局,你很快意識(shí)到代碼是何等少。

 

圖4:PySimpleGUI高級(jí)自定義數(shù)據(jù)輸入表單

最后一行代碼打開消息框。 這就是它的樣子: 

圖5:PySimpleGUI自定義消息框

消息框調(diào)用的每個(gè)參數(shù)都在一個(gè)新的行上顯示。消息框中有兩行文本;第二行很長,包了好多次。

花點(diǎn)時(shí)間將結(jié)果值與GUI配對(duì),了解如何創(chuàng)建和返回結(jié)果。

11.將GUI添加到程序或腳本

如果你有一個(gè)使用命令行的腳本,不必為了添加GUI而丟棄它。一個(gè)簡單的辦法是,如果命令行上給出零參數(shù),就運(yùn)行GUI。 否則,執(zhí)行命令行。

只需要這種邏輯:

 

  1. if len(sys.argv) == 1:  
  2.         # collect arguments from GUI  
  3. else 
  4.     # collect arguements from sys.argv 

 

想盡快創(chuàng)建并運(yùn)行GUI,最簡單的方法就是,從PySimpleGUI Cookbook(https://pysimplegui.readthedocs.io/en/latest/cookbook/)復(fù)制一個(gè)recipe并修改。

原文標(biāo)題:Add GUIs to your programs and scripts easily with PySimpleGUI,作者:Mike Barnett  

【51CTO譯稿,合作站點(diǎn)轉(zhuǎn)載請(qǐng)注明原文譯者和出處為51CTO.com】

責(zé)任編輯:龐桂玉 來源: 51CTO
相關(guān)推薦

2018-09-19 08:50:45

PySimpleGUIGUIPython

2011-01-14 11:40:36

Linux添加刪除

2022-06-24 09:58:52

CurtailLinux

2012-01-09 13:55:35

Java

2012-03-21 09:33:17

ibmdw

2012-04-26 14:02:58

ibmdw

2024-06-12 12:32:09

2010-08-05 16:13:20

DB2數(shù)據(jù)庫

2022-08-01 08:12:14

位運(yùn)算代碼性能

2011-05-03 09:14:45

QtOvi商店Symbian

2021-05-12 11:08:33

PPT代碼工具

2009-12-03 16:21:51

網(wǎng)上Suse添加字體

2009-06-14 21:47:14

MIDIJava程序

2021-06-10 10:26:03

PythonGUI軟件包

2010-03-24 14:14:42

Python GUI

2009-05-07 20:05:21

CASRMVmware

2009-11-09 10:08:31

Visual Stud

2010-02-05 10:42:58

2021-07-29 13:06:29

Python機(jī)器學(xué)習(xí)編程語言

2022-01-21 09:31:37

PythonLinux視頻
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)