matlab的gui和脚本
很少有人通过双击.py文件来运行Python程序,就好像它是一个.exe文件一样。 当典型用户(非程序员类型)双击.exe文件时,他们希望该文件会弹出一个可以与之交互的窗口。 虽然使用tkinter的GUI可以在标准的Python安装中使用,但很多程序不太可能这样做。
如果很容易将Python程序打开到GUI中,完全由初学者完成,该怎么办? 有人会在乎吗? 有人会用吗? 很难回答,因为到目前为止,构建自定义GUI并不容易 。
在GUI上添加Python程序/脚本的能力似乎存在差距。 完整的初学者只使用命令行,许多高级程序员不想花时间编写tkinter GUI。
GUI框架
不乏Python的GUI框架。 Tkinter,WxPython,Qt和Kivy是其中的一些主要软件包。 另外,有很多精简的GUI程序包可以“包装”其中一个主要程序包,包括EasyGUI,PyGUI和Pyforms。
问题在于,初学者(经验不足六周的人)甚至无法学习最简单的主要软件包。 这将包装程序包保留为一个潜在的选择,但是对于大多数新用户而言,构建自定义GUI布局仍然是困难或不可能的。 即使有可能,包装器仍需要代码页。
PySimpleGUI试图通过为可轻松自定义的GUI提供超简单,易于理解的界面来解决这些GUI难题。 使用PySimpleGUI时,甚至许多复杂的GUI都需要少于20行的代码。
秘密
PySimpleGUI对于新手来说更胜一筹的原因是该软件包包含了通常希望用户编写的大多数代码。 按钮回调由PySimpleGUI处理,而不是由用户代码处理。 初学者很难理解函数的概念,并且期望他们在头几周就了解回调函数是很困难的。
对于大多数GUI,安排GUI小部件通常需要几行代码,每个小部件至少需要一行或两行。 PySimpleGUI使用自动创建布局的“自动打包程序”。 无需布置GUI窗口的打包或网格系统。
最后,PySimpleGUI以巧妙的方式利用Python语言构造,从而缩短了代码量并以直接的方式返回GUI数据。 在窗体布局中创建窗口小部件时,它是就地配置的,而不是几行代码。
什么是GUI?
大多数GUI会做一件事:从用户那里收集信息并返回。 从程序员的角度来看,这可以概括为如下所示的函数调用:
button, values = GUI_Display(gui_layout)
大多数GUI期望的是单击的按钮(例如,确定,取消,保存,是,否等)以及用户输入的值。 GUI的实质可以归结为一行代码。
这正是PySimpleGUI的工作方式(对于简单的GUI)。 当调用显示GUI时,在单击关闭窗体的按钮之前,不会执行任何操作。
还有更复杂的GUI,例如单击按钮后无法关闭的GUI。 示例包括机器人的远程控制界面和聊天窗口。 这些复杂的形式也可以用PySimpleGUI创建。
制作快速的GUI
PySimpleGUI什么时候有用? 立即,无论何时需要GUI。 创建和尝试GUI的时间不到五分钟。 制作GUI的最快方法是从PySimpleGUI Cookbook复制一个。 跟着这些步骤:
- 查找与您要创建的外观相似的GUI
- 复制食谱中的代码
- 将其粘贴到您的IDE中并运行
让我们看看本书的第一个配方。
import PySimpleGUI as sg
# Very basic form. Return values as a list
form = 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])
这是一个合理大小的表格。
如果您只需要收集一些值并且它们基本上都是字符串,则可以复制此配方并对其进行修改以适合您的需求。
您甚至可以仅用五行代码创建自定义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)
在五分钟内制作一个自定义GUI
如果您的布局简单明了,则可以通过修改Cookbook中的代码,在不到5分钟的时间内在PySimpleGUI中创建自定义布局。
小部件在PySimpleGUI中称为元素。 这些元素的拼写与您在Python代码中键入它们的方式完全相同。
核心要素
Text
InputText
Multiline
InputCombo
Listbox
Radio
Checkbox
Spin
Output
SimpleButton
RealtimeButton
ReadFormButton
ProgressBar
Image
Slider
Column
捷径清单
PySimpleGUI还具有两种类型的元素快捷方式。 一种类型就是完全相同的元素的其他名称(例如T
代替Text
)。 第二种类型使用特定设置配置元素,使您不必指定所有参数(例如, Submit
是上面带有文本“ Submit”的按钮)
T = Text
Txt = Text
In = InputText
Input = IntputText
Combo = InputCombo
DropDown = InputCombo
Drop = InputCombo
按钮快捷方式
许多常用按钮已实现为快捷方式。 这些包括:
FolderBrowse
FileBrowse
FileSaveAs
Save
Submit
OK
Ok
Cancel
Quit
Exit
Yes
No
还有一些通用按钮功能的快捷方式。
SimpleButton
ReadFormButton
RealtimeButton
这些是您可以在PySimpleGUI中选择的所有GUI小部件。 如果不在这些列表中,则不会出现在您的表单布局中。
GUI设计模式
元素的布局是从一个程序到另一个程序的变化。这是上面示例中删除了布局的代码:
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)
大多数GUI的流程是:
- 创建表单对象
- 将GUI定义为列表列表
- 显示GUI并获取结果
这些都是您在PySimpleGUI的设计模式中看到的。
GUI布局
要创建您的自定义GUI,首先将您的表单分成几行,因为表单一次定义了一行。 然后从左到右依次放置一个元素。
结果是一个“列表列表”,看起来像这样:
layout = [ [Text('Row 1')],
[Text('Row 2'), Checkbox('Checkbox 1', OK()), Checkbox('Checkbox 2'), OK()] ]
此布局产生以下窗口:
显示GUI
完成布局并复制了设置并显示表单的代码行之后,就该显示表单并从用户那里获取值了。
这是显示表单并提供结果的代码行:
button, values = form.LayoutAndRead(layout)
表单返回两个值:单击的按钮的文本和用户输入到表单中的值的列表。
如果显示了示例表单,并且用户除了单击“ 确定”按钮外没有执行任何其他操作,结果将是:
button == 'OK'
values == [False, False]
复选框元素返回值为True或False。 由于复选框默认为未选中,因此返回的两个值均为False。
显示结果
从GUI获得值后,最好检查变量中的值。 让我们坚持使用GUI想法,而不是使用print
语句将它们打印出来,然后将数据输出到窗口。
PySimpleGUI有许多消息框可供选择。 传递到消息框的数据显示在一个窗口中。 该函数接受任意数量的参数。 您可以简单地指出要在调用中看到的所有变量。
PySimpleGUI中最常用的消息框是MsgBox。 要显示上一个示例的结果,请编写:
MsgBox('The GUI returned:', button, values)
放在一起
既然您已经了解了基础知识,那么我们就来整理一个表单,其中包含尽可能多的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中对相同的GUI布局进行编码,您会很快意识到它的大小。
代码的最后一行打开一个消息框。 看起来是这样的:
消息框调用的每个参数都显示在新行上。 消息框中有两行文本; 第二行很长,包裹了很多次
花一点时间,将结果值与GUI配对,以了解如何创建和返回结果。
在程序或脚本中添加GUI
如果您有使用命令行的脚本,则不必为了添加GUI而放弃它。 一个简单的解决方案是,如果命令行上给定的参数为零,则将运行GUI。 否则,请像今天一样执行命令行。
这种逻辑是所需要的:
if len(sys.argv) == 1:
# collect arguments from GUI
else:
# collect arguements from sys.argv
快速启动和运行GUI的最简单方法是从PySimpleGUI Cookbook复制和修改其中一个配方。
玩得开心! 为您讨厌手动运行的脚本增添趣味。 花5或10分钟播放演示脚本。 您可能会发现已经存在一个可以完全满足您需要的东西。 如果没有,您会发现创建自己的很简单 。 如果您真的迷路了,则只需投入10分钟。
资源资源
安装
PySimpleGUI可在运行tkinter的所有系统上运行,包括Raspberry Pi,并且需要Python 3
pip install PySimpleGUI
文献资料
matlab的gui和脚本