当前位置: 首页 > 科技观察

用PySimpleGUI轻松为程序和脚本添加GUI_0

时间:2023-03-23 10:41:48 科技观察

使用PySimpleGUI轻松将GUI添加到程序和脚本中当普通用户(非程序员)双击.exe文件时,它认为应该弹出一个窗口来与之交互。虽然可以使用tkinter创建带有标准Python安装的GUI,但对于许多程序来说这不太可能。1.GUI框架市面上不乏Python的GUI框架。Tkinter、WxPython、Qt和Kivy是几个主要的软件包。此外,还有许多简化的GUI包“包装”了其中一个主要包,包括EasyGUI、PyGUI和Pyforms。问题是初学者连最简单的主要软件包都学不会。这使得包装器包成为一个潜在的选择,但对于大多数新用户来说,构建自定义GUI布局仍然很困难或不可能。即使可能,包装器包仍然需要一页又一页的代码。PySimpleGUI(https://github.com/MikeTheWatchGuy/PySimpleGUI)试图通过提供具有超级简单、易于理解和易于定制界面的GUI来克服这些GUI挑战。如果使用PySimpleGUI,即使是许多复杂的GUI也可以用不到20行代码完成。2.秘诀PySimpleGUI非常适合初学者的原因是该包包含用户通常需要编写的大部分代码。处理按钮回调的是PySimpleGUI,而不是用户的代码。初学者可能很难掌握函数的概念,要求他们在前几周理解回调是一场真正的斗争。与大多数GUI一样,安排GUI小部件通常需要多行代码,每个小部件至少需要一两行代码。PySimpleGUI使用自动创建布局的“autopackager”。在没有包或网格系统的情况下布置GUI窗口。最后,PySimpleGUI巧妙地使用了Python语言组件,减少了代码量,简单直观地返回了GUI数据。当您创建具有表单布局的小部件时,它已经配置到位,无需编写多行代码。3.什么是GUI?大多数GUI只做一件事:从用户那里收集信息并返回信息。从程序员的角度来看,这可以概括为如下函数调用:等)和用户输入的值。GUI的本质归结为一行代码。这正是PySimpleGUI的工作方式(对于简单的GUI)。当调用以显示GUI时,在单击关闭窗体的按钮之前什么也不做。一些更复杂的图形用户界面,例如单击按钮后不关闭的图形用户界面。包括机器人的远程控制界面和聊天窗口。这些复杂的表单也可以使用PySimpleGUI创建。4.快速创建GUIPySimpleGUI什么时候有用?当您需要GUI时很有用。创建和试用GUI只需不到5分钟的时间。创建GUI的最快方法是从PySimpleGUICookbook(https://pysimplegui.readthedocs.io/en/latest/cookbook/)中复制一个。请遵循以下步骤:找到一个与您要创建的GUI相似的GUI。从食谱中复制代码。粘贴到您的IDE中,然后运行。看看Cookbook中的第一个食谱。importPySimpleGUIassg#Verybasicform.Returnvaluesalistform=sg.FlexForm('Simpledataentryform')#beginwithablankformlayout=[[sg.Text('PleaseenteryourName,Address,Phone')],[sg.Text('Name',size=(15,1)),sg.InputText('姓名')],[sg.Text('地址',size=(15,1)),sg.InputText('地址')],[sg.Text('电话',size=(15,1)),sg.InputText('phone')],[sg.Submit(),sg.Cancel()]]button,values=form.LayoutAndRead(layout)print(button,values[0],values[1],values[2])这是一个大小适中的表格。图1:PySimpleGUI数据录入表单如果你只需要收集几个值,而且都是字符串,你可以复制这个食谱,根据你的需求修改。您甚至可以仅用5行代码创建自定义GUI布局。importPySimpleGUIassgform=sg.FlexForm('MyfirstGUI')layout=[[sg.Text('Enteryourname'),sg.InputText()],[sg.OK()]]button,(name,)=form.LayoutAndRead(布局)图2:仅需5行代码的PySimpleGUI表单即可在5.5分钟内创建自定义GUI如果布局简单,使用PySimpleGUI创建自定义布局应该不到5分钟,只需修改说明书中的代码即可。Widget组件在PySimpleGUI中称为元素。这些元素是你在Python代码中键入的内容,注意拼写。核心元素TextInputTextMultilineInputComboListboxRadioCheckboxSpinOutputSimpleButtonRealtimeButtonReadFormButtonProgressBarImageSliderColumn快捷方式列表PySimpleGUI还有两个其他元素快捷方式。一个是完全相同的元素的另一个名称(例如T而不是Text)。第二个为元素配置特定设置,因此不需要指定所有参数(例如,提交是一个带有文本“提交”的按钮)。T=TextTxt=TextIn=InputTextInput=IntputTextCombo=InputComboDropDown=InputComboDrop=InputCombo按钮快捷方式许多常用的按钮已实现为快捷方式。这包括:FolderBrowseFileBrowseFileSaveAsSaveSubmitOKOkCancelQuitExitYesNo还有更多通用按钮功能的快捷方式。SimpleButtonReadFormButtonRealtimeButton这些是您可以在PySimpleGUI中选择的GUI窗口组件。如果某些内容不在这些列表中,则不会进入表单布局。6.GUI设计模式GUI中经常不变的元素是创建和显示窗口的调用。元素的布局因程序而异。下面是上面例子的代码,去掉了layout:importPySimpleGUIassgform=sg.FlexForm('Simpledataentryform')#Defineyourformhere(it'salistoflists)button,values=form.LayoutAndRead(layout)大多数GUI的流程是这样的如下:定义为列表显示GUI,并得到结果7.GUI布局如果要创建自定义GUI,首先将窗体细分为几行,因为窗体一次定义一行。然后它按从左到右的顺序一个接一个地放置元素。结果是一个“列表列表”,如下所示:layout=[[Text('Row1')],[Text('Row2'),Checkbox('Checkbox1',OK()),Checkbox('Checkbox2'),OK()]]此布局生成此窗口:图3:PySimpleGUI自定义数据输入表单8.显示GUI一旦布局完成并且创建和显示表单的代码行已被复制,表单现在可以从用户值中显示和接收。这行代码显示表单并提供结果:button,values=form.LayoutAndRead(layout)表单返回两个值:被点击的按钮的文本和用户输入表单的值列表.如果示例表单被显示并且用户简单地单击了“OK”按钮,结果将是:button=='OK'values==[False,False]复选框元素返回True或False的值。由于复选框默认是未选中的,所以返回的两个值都是False。9.显示结果一旦从GUI中获得了值,就可以验证变量中有哪些值。与其使用打印语言来输出它们,不如坚持使用GUI并将数据输出到窗口。PySimpleGUI有很多消息框可供选择。传递给消息框的数据显示在窗口中。该函数接受许多变量。您只需指出您希望在调用中看到的所有变量。PySimpleGUI中最常用的消息框是MsgBox。要显示前面示例的结果,请编写:MsgBox('TheGUIreturned:',button,values)10.将它们放在一起现在您已经了解了基础知识,让我们从PySimpleGUI构建一个包含尽可能多元素的表单。此外,为了美观,我们将“外观和感觉”更改为绿色和棕褐色配色方案。importPySimpleGUIassgsg.ChangeLookAndFeel('GreenTan')form=sg.FlexForm('Everythingbagel',default_element_size=(40,1))column1=[[sg.Text('Column1',background_color='#d3dfda',justification='center',size=(10,1))],[sg.Spin(values=('SpinBox1','2','3'),initial_value='SpinBox1')],[sg.Spin(values=('SpinBox1','2','3'),initial_value='SpinBox2')],[sg.Spin(values=('SpinBox1','2','3'),initial_value='SpinBox3')]]layout=[[sg.Text('Allgraphicwidgetsinoneform!',size=(30,1),font=("Helvetica",25))],[sg.Text('Hereissometext....andaplacetoentertext')],[sg.InputText('Thisismytext')],[sg.Checkbox('Myfirstcheckbox!'),sg.Checkbox('Mysecondcheckbox!',default=True)],[sg.Radio('MyfirstRadio!',"RADIO1",default=True),sg.Radio('MysecondRadio!',"RADIO1")],[sg.Multiline(default_text='ThisisthedefaultTextshouldyoudecidenottotypeanything',size=(35,3)),sg.Multiline(default_text='Asecondmulti-line',size=(35,3))],[sg.InputCombo(('Combobox1','Combobox2'),size=(20,3)),sg.Slider(range=(1,100),orientation='h',size=(34,20),default_value=85)],[sg.Listbox(values=('Listbox1','Listbox2','Listbox3'),size=(30,3)),sg.Slider(range=(1,100),orientation='v',size=(5,20),default_value=25),sg.滑块(范围=(1,100),方向='v',大小=(5,20),默认值=75),sg.Slider(范围=(1,100),方向='v',大小=(5,20),default_value=10),sg.Column(column1,background_color='#d3dfda')],[sg.Text('_'*80)],[sg.Text('ChooseAFolder',size=(35,1))],[sg.Text('YourFolder',size=(15,1),auto_size_text=False,justification='right'),sg.InputText('DefaultFolder'),sg.FolderBrowse()],[sg.Submit(),sg.Cancel()]]button,values=form.LayoutAndRead(layout)sg.MsgBox(button,values)看起来代码很多,但是尝试直接用tkinter写同样的GUI布局,你会很快实现图4:PySimpleGUI高级自定义数据输入窗体最后一行代码打开了一个消息框。它看起来是这样的:图5:PySimpleGUI自定义消息框消息框调用的每个参数都显示在一个新行上。消息框中有两行文字;第二行很长,绕了很多次。花点时间将结果值与GUI配对,并了解如何创建和返回结果。11.向程序或脚本添加GUI如果你有一个使用命令行的脚本,你不必为了添加GUI而丢弃它。一个简单的解决方案是,如果在命令行上给出零参数,则运行GUI。否则,将执行命令行。只需要这个逻辑:iflen(sys.argv)==1:#collectargumentsfromGUIelse:#collectarguementsfromsys.argv如果你想尽快创建和运行GUI,最简单的方法是,从PySimpleGUICookbook(https://pysimplegui.readthedocs.io/en/latest/cookbook/)复制食谱并进行修改。原标题:AddGUIstoyourprogramsandscriptseasilywithPySimpleGUI,作者:MikeBarnett