65.9K
CodeProject 正在变化。 阅读更多。
Home

使用 PySimpleGUI 在 Python 中创建用户界面

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.97/5 (8投票s)

2021年10月27日

CPOL

3分钟阅读

viewsIcon

28586

downloadIcon

476

本文演示了如何使用 PySimpleGUI 创建用户界面。

引言

PySimpleGUI 是一个 Python 包,可以使用最简单的代码开发用户界面。 尽管它很简单,但它可用于创建复杂而精致的用户界面。 任何程序员,即使他是 Python 新手,也可以轻松学习 PySimpleGUI,并在几分钟内开始创建具有美观用户界面的 Python 应用程序。

背景

PySimpleGUI 目前支持 4 个 GUI 框架

  1. PySimpleGUI
  2. PySimpleGUIQt
  3. PySimpleGUIWx
  4. PySimpleGUIWeb

将 GUI 从一个框架移植到另一个框架只需进行极少的更改。 某些功能可能只受一个框架支持,而不受其他框架支持,但总的来说,从一个框架移植到另一个框架很容易,只需对代码进行最少的更改。 要使用的框架可以使用 import 语句指定。 例如,要使用 PySimpleGUI,我们可以写 import PySimpleGUI as sg ,要使用 PySimpleGUIQt,我们可以写 import PySimpleGUIQt as sg,要使用 PySimpleGUIWeb,我们可以写 import PySimpleGUIWeb as sg

Using the Code

与其他包一样,PySimpleGUI 可以使用以下 pip 命令安装

pip install pysimplegui --user

要安装 PySimpleGUIWeb,可以使用以下命令

pip install pysimpleguiweb --user

Layouts

布局在 PySimpleGUI 中使用列表的列表定义。 主列表中的每个列表定义一行。 每行包含在单行上呈现的用户界面元素。

以下是一些常用的用户界面元素,可以在 PySimpleGUI 中创建它们。

  • sg.Text:用于呈现常量文本
  • sg.InputText:用于在运行时接受输入
  • sg.Checkbox:用于显示复选框
  • sg.Radio:用于显示单选按钮
  • sg.Combo:用于将项目列表显示为组合框,只能从中选择一个元素
  • sg.Listbox:用于将项目列表显示为列表框。 设置 select_mode="multiple" 属性允许选择多个元素

例如,以下代码可用于呈现典型的用户界面

layout = [
                [sg.Text("Select a theme: ",size=(15,1)),
                sg.Combo(sg.theme_list(),key="t",default_value="BlueMono",size=(10,1))],
                [sg.Text("Enter your name: ",size=(15,1)),
                sg.InputText(key="n",size=(10,1))],
                [sg.Checkbox("Capitalize",key="c",size=(15,1))],
                [sg.Text("Choose your gender: ",size=(15,1)),
                sg.Radio("Male","g",True,key="g1"),
                sg.Radio("Female","g",key="g2")],
                [sg.Text("Choose your qualification: ",size=(15,1)),
                sg.Combo(qualifications_list,key="q",default_value="Graduate",size=(15,3))],
                [sg.Text("Choose your hobbies: ",size=(15,1)),
                sg.Listbox(hobbies_list,key="h",select_mode="multiple",size=(15,3))],
                [sg.Button("Show",size=(15,1)),sg.Button("Reset",size=(15,1))]
             ]
window = sg.Window("Controls",layout)

上述布局中的第一行包含一个包含所有可用主题的组合框,使用 sg.theme_list() 函数获得。 其他行定义其他用户界面元素。 sg.Window 用于创建一个窗口,标题为“控件”,并具有指定的布局。 其输出如下

事件处理

需要一个事件循环来处理事件并读取在运行时输入的输入。 可以如下创建事件循环

while True:
        event,values = window.read()
        if event == sg.WINDOW_CLOSED:
           break
        if event == "Show":
           name = values["n"].upper() if values["c"] else values["n"]
           gender = "Male" if values["g1"] else "Female"
           qualification = values["q"]
           hobbies = ""
           for h in values["h"]:
                hobbies = hobbies + h + ","
           hobbies = hobbies.rstrip(",")
           details = "Name: " + name + "\n"
           details = details + "Gender: " + gender + "\n"
           details = details + "Qualification: " + qualification + "\n"
           details = details + "Hobbies: " + hobbies + "\n"
           sg.theme(values["t"])
           sg.popup(details,title="Details")
        if event == "Reset":
           window["n"].update("")
           window["c"].update(False)
           window["g1"].update(True)
           window["q"].update("Graduate")
           window["h"].update(hobbies_list)
window.close()

在上面的代码中,使用 window.read() 函数获得有关单击的按钮或窗口关闭事件以及输入的数据的信息。 如果单击窗口关闭按钮,则会触发 sg.WINDOW_CLOSED 事件,导致控件跳出事件循环,并使用 close() 函数关闭窗口。 如果单击“Show”按钮,则会触发“Show”事件,在该事件中使用 values 字典收集在表单上输入的所有数据,并使用 popup() 函数在弹出窗口中显示。 如果单击“重置”按钮,则会触发“Reset”事件,在该事件中使用 update() 函数将所有控件重置为其默认值。 在“Show”事件中,使用 sg.theme() 函数应用当前选择的主题。

Themes:主题可用于 PySimpleGUI,以使用尽可能短的代码显示色彩丰富且更漂亮的窗口。 以下代码行创建一个填充所有可用主题的组合框。

sg.Combo(sg.theme_list(),key="t",default_value="BlueMono",size=(10,1))

要应用从组合框中选择的主题,可以使用以下代码。

sg.theme(values["t"])

可以使用 sg.theme_previewer() 函数预览所有可用的主题,如下所示

import PySimpleGUI as sg
sg.theme_previewer()

上面的代码产生以下输出

关注点

我希望以上讨论对读者有所帮助,并引导更多程序员使用 PySimpleGUI

历史

  • 2021 年 10 月 27 日:初始版本
© . All rights reserved.