PySimpleGUI库创建python代码的图形窗口

2023-11-02

目录

前言

1.pip install PySimpleGUI安装后导入包

2.界面布局设置

3.event和Values详解

4.依据输入更新窗口的显示

5.窗口的字体等设置

6.可用控件列表

7.内置Button

8.target参数

9.popup弹出窗口


前言

        笔者在运行代码的过程中,感觉面对黑色执行框有些单调,于是研究了PySimpleGUI库进行图形窗口的构建,从学习成本和使用效果来看,PySimple足以满足普通用户的需求。


1.pip install PySimpleGUI安装后导入包

import PySimpleGUI as sg
#一般的使用中都会命名为sg

2.界面布局设置

该部分负责设计窗口的布局,元素的数量与窗口中内容行数对应

sg.theme('DarkAmber')   # 设置当前主题色
# 界面布局,将会按照列表顺序从上往下依次排列,二级列表中,从左往右依此排列
layout = [  [sg.Text('Some text on Row 1')],
            [sg.Text('Enter something on Row 2'), sg.InputText("请输入")],
            [sg.Button('Ok'), sg.Button('Cancel')] ]

# 创造窗口
window = sg.Window('Window Title', layout)

while True:
    event, values = window.read()
    if event in (None, 'Cancel'):   # 如果用户关闭窗口或点击`Cancel`
        break
    print('You entered ', values[0])

window.close()

效果如下:

 

3.event和Values详解

当执行window.read()函数时,将会返回一个(event,values)元组。event是事件,它可能是一个按钮的按下、列表项的选择等,比如我设置了一个sg.Submit('提交')按钮,那么event返回的是'提交'。如果我什么也不填,sg.Submit(),那么返回默认值'Submit',当然界面上显示的也是Submit。如果用户点击右上角X关闭窗口,则是None

注意,默认情况下只有Button才能触发事件,然后执行window.read(),也就是说返回的event始终是button名。但是如果你给控件加上一个enable_events=True参数,那么点击任何控件都可以触发事件了,比如说sg.Text('My one-shot window.',enable_events=True),那么点击文本也可以触发事件。

values是一个包含所有输入元素的值的字典。字典使用键来定义词条。如果你的元素没有特定的键,系统为你提供一个键。这些自动编号的键是以0开始的。

比如说我有两个输入框,则第一个输入框的值是values[0],第二个输入框的值是values[1]

如果想自定义输入的键,很简单,相应位置修改为以下代码,从而可以标记每个输出:

layout = [
        [sg.Text('自定义键名方便记录:')],    
        [sg.Text('输入1'),sg.InputText("请输入",key='input1')],
        [sg.Text('输入2'),sg.InputText("请输入",key='input2')],
        [sg.Submit('提交'), sg.Cancel()]
            ]    

window = sg.Window('Window Title', layout)  

event, values = window.read()  

window.close()
text_input = values['input2'] 
sg.popup('根据键名选择输入的值:', text_input) # 弹出窗口

 

 

4.依据输入更新窗口的显示

下面是一个例子,使用window[index].update(指定值)的方法,可以更新key为index控件的值,当然,指定值可以是另外一个控件的值,一个例子如下:

layout = [[sg.Text('Your typed chars appear here:'), sg.Text(size=(15,1), key='-OUTPUT-')],
          [sg.Input(key='-IN-')],
          [sg.Button('Show'), sg.Button('Exit')]]
#第一行留有一个用以更新的变量区域,键名自定义设置,此处设置为-OUTPUT-

window = sg.Window('窗口名', layout)

while True:  # Event Loop
    event, values = window.read()
    print(event, values)
    if event in  (None, 'Exit'):
        break
    if event == 'Show':
        # Update the "output" text element to be the value of "input" element
        window['-OUTPUT-'].update(values['-IN-'])
        window['-OUTPUT-'].update("此处也可以直接输入值,字符串,列表这些元素")
        #将输入的值更新在OUTPUT区域

window.close()

依据此功能,可以做到根据输入修改页面内容

5.窗口的字体等设置

window = sg.Window('My window with tabs', layout, font=("宋体", 15),default_element_size=(50,1))  
# 字体为宋体,大小5默认窗口大小为50宽1高

 

6.可用控件列表

使用方法:直接类似于sg.Text()的使用方式即可

  • Text # 文本

  • InputText # 单行输入框

  • Button # 按钮

    • FileBrowse # 文件选择,选择多个文件FilesBrowse,保存文件FileSaveAs

    • FolderBrowse # 文件夹选择

    • CalendarButton # 日历选择,必须输入按钮名如'choose date',返回字符串

    • ColorChooser # 颜色选择,如sg.ColorChooserButton('颜色选择'),返回RGB元组

  • Combo # 下拉选择菜单,如sg.Combo(['choice 1', 'choice 2'])

  • Checkbox # 复选框。如sg.Checkbox('My first Checkbox!', default=True), sg.Checkbox('My second Checkbox!'),返回布尔值

  • Radio # 单选按钮,如sg.Radio('My first Radio!', "RADIO1", default=True),sg.Radio('My second radio!', "RADIO1"),第一个是显示的字符,第二个是单选按钮所在组,只有在同一组的单选按钮才有排他性,第三个是默认选中,返回布尔值True or False

  • Listbox # 列表框,如sg.Listbox(values=['Listbox 1', 'Listbox 2', 'Listbox 3']

  • Slider # 滚动条,如sg.Slider(range=(1,500),default_value=222,orientation='horizontal'),垂直是vertical

  • Multiline # 多行输入框

  • Multi-line Text Output (not on tkinter version)

  • Spin # 一个可以上下调节的控件,像一个简化版的滚动条?如sg.Spin([i for i in range(1,11)], initial_value=1)

  • ProgressBar # 进度条

7.内置Button

虽然官方列了很多内置Button,但是测试下来似乎并没有什么特殊效果,只是多了可以直接使用的Button罢了

  • OK

  • Ok

  • Submit

  • Cancel

  • Yes

  • No

  • Exit

  • Quit

  • Help

  • Save

  • SaveAs

  • Open

比如说,你可以直接sg.OK(),也可以sg.Button('OK')

8.target参数

选择器型控件,如FileBrowse,FilesBrowse,FolderBrowse,FileSaveAs,CalendarButton,ColorChooserButton,会传递选择值给窗口上的另外一个控件,可以是TextInputText或它本身。比如它与输入框在同一行时会传地址给输入框,如[sg.InputText(),sg.FolderBrowse()],可以为输入框加一个visible=False参数隐藏(是隐藏整个输入框)。

那么我想让值传递给指定控件,可以加一个target参数,如:

layout = [[sg.T('Source Folder')],
              [sg.In(key='input')],
              [sg.FolderBrowse(key='_BUTTON_KEY_',target='input'), sg.OK()]]

这样选择的值就会传递给相同key的控件

注意,使用此参数时,就无法获取选择器控件的值了,比如说上面的例子,你就无法print(values['_BUTTON_KEY_'])

 上图就是利用FileBrowse选取文件路径作为输入,将该值发送到input中

9.popup弹出窗口

简单来说,popup就是一个弹出窗口,执行该函数时,会停止执行当前窗口,直到用户关闭弹出窗口时才会重新执行。

可以输入任意数量的参数,都会转化为字符串并输出。

拥有以下类型的popup:

sg.popup('Popup')  # Shows OK button
sg.popup_ok('PopupOk')  # Shows OK button
sg.popup_yes_no('PopupYesNo')  # Shows Yes and No buttons
sg.popup_cancel('PopupCancel')  # Shows Cancelled button
sg.popup_ok_cancel('PopupOKCancel')  # Shows OK and Cancel buttons
sg.popup_error('PopupError')  # Shows red error button
sg.popup_timed('PopupTimed')  # Automatically closes
sg.popup_auto_close('PopupAutoClose')  # Same as PopupTimed

比如popup_ok是一个带有ok按钮的弹出窗口,popup_timed是一个过一段时间自动关掉的弹出窗口。

popup中可以输入的参数,自行help(sg.popup),需要注意的一点是因为popup会把所有输入的参数都当做字符串输出,所以特殊的参数需要标识出来,比如sg.popup('values[0],values[1],title="test"')

popup_scrolled

还有一类特殊的popup,即Scrolled Output,它展示的是带有滚动条的弹出窗口,适用于展示大量信息时,函数名为sg.popup_scrolled()

popup_scrolled会自动调整大小,如果想自定义的话,可以sg.popup_scrolled(my_text, size=(80, None))

上述代码会展示一个宽度为80字符,高度随输出字符串变化的弹出窗口。

效果如下:

 

popup_get_file

获取一个或多个文件地址

# 例子:
text = sg.popup_get_file('Please enter a file name')

效果如下:

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

PySimpleGUI库创建python代码的图形窗口 的相关文章

  • 使用 openCV 对图像中的子图像进行通用检测

    免责声明 我是计算机视觉菜鸟 我看过很多关于如何在较大图像中查找特定子图像的堆栈溢出帖子 我的用例有点不同 因为我不希望它是具体的 而且我不确定如何做到这一点 如果可能的话 但我感觉应该如此 我有大量图像数据集 有时 其中一些图像是数据集的
  • 如何使用固定的 pandas 数据框进行动态 matplotlib 绘图?

    我有一个名为的数据框benchmark returns and strategy returns 两者具有相同的时间跨度 我想找到一种方法以漂亮的动画风格绘制数据点 以便它显示逐渐加载的所有点 我知道有一个matplotlib animat
  • 如何生成给定范围内的回文数列表?

    假设范围是 1 X 120 这是我尝试过的 gt gt gt def isPalindrome s check if a number is a Palindrome s str s return s s 1 gt gt gt def ge
  • DreamPie 不适用于 Python 3.2

    我最喜欢的 Python shell 是DreamPie http dreampie sourceforge net 我想将它与 Python 3 2 一起使用 我使用了 添加解释器 DreamPie 应用程序并添加了 Python 3 2
  • 更改自动插入 tkinter 小部件的文本颜色

    我有一个文本框小部件 其中插入了三条消息 一条是开始消息 一条是结束消息 一条是在 单位 被摧毁时发出警报的消息 我希望开始和结束消息是黑色的 但被毁坏的消息 参见我在代码中评论的位置 插入小部件时颜色为红色 我不太确定如何去做这件事 我看
  • 如何在Windows上模拟socket.socketpair

    标准Python函数套接字 套接字对 https docs python org 3 library socket html socket socketpair不幸的是 它在 Windows 上不可用 从 Python 3 4 1 开始 我
  • 如何使用包含代码的“asyncio.sleep()”进行单元测试?

    我在编写 asyncio sleep 包含的单元测试时遇到问题 我要等待实际的睡眠时间吗 I used freezegun到嘲笑时间 当我尝试使用普通可调用对象运行测试时 这个库非常有用 但我找不到运行包含 asyncio sleep 的测
  • 如何等到 Excel 计算公式后再继续 win32com

    我有一个 win32com Python 脚本 它将多个 Excel 文件合并到电子表格中并将其另存为 PDF 现在的工作原理是输出几乎都是 NAME 因为文件是在计算 Excel 文件内容之前输出的 这可能需要一分钟 如何强制工作簿计算值
  • SQL Alchemy 中的 NULL 安全不等式比较?

    目前 我知道如何表达 NULL 安全的唯一方法 SQL Alchemy 中的比较 其中与 NULL 条目的比较计算结果为 True 而不是 NULL 是 or field None field value 有没有办法在 SQL Alchem
  • 打破嵌套循环[重复]

    这个问题在这里已经有答案了 有没有比抛出异常更简单的方法来打破嵌套循环 在Perl https en wikipedia org wiki Perl 您可以为每个循环指定标签 并且至少继续一个外循环 for x in range 10 fo
  • 从 scikit-learn 导入 make_blobs [重复]

    这个问题在这里已经有答案了 我收到下一个警告 D Programming Python ML venv lib site packages sklearn utils deprecation py 77 DeprecationWarning
  • Python 中的二进制缓冲区

    在Python中你可以使用StringIO https docs python org library struct html用于字符数据的类似文件的缓冲区 内存映射文件 https docs python org library mmap
  • NameError:名称“urllib”未定义”

    CODE import networkx as net from urllib request import urlopen def read lj friends g name fetch the friend list from Liv
  • python 集合可以包含的值的数量是否有限制?

    我正在尝试使用 python 设置作为 mysql 表中 ids 的过滤器 python集存储了所有要过滤的id 现在大约有30000个 这个数字会随着时间的推移慢慢增长 我担心python集的最大容量 它可以包含的元素数量有限制吗 您最大
  • 循环中断打破tqdm

    下面的简单代码使用tqdm https github com tqdm tqdm在循环迭代时显示进度条 import tqdm for f in tqdm tqdm range 100000000 if f gt 100000000 4 b
  • VSCode:调试配置中的 Python 路径无效

    对 Python 和 VSCode 以及 stackoverflow 非常陌生 直到最近 我已经使用了大约 3 个月 一切都很好 当尝试在调试器中运行任何基本的 Python 程序时 弹出窗口The Python path in your
  • 用于运行可执行文件的python多线程进程

    我正在尝试将一个在 Windows 上运行可执行文件并管理文本输出文件的 python 脚本升级到使用多线程进程的版本 以便我可以利用多个核心 我有四个独立版本的可执行文件 每个线程都知道要访问它们 这部分工作正常 我遇到问题的地方是当它们
  • Python:元类属性有时会覆盖类属性?

    下面代码的结果让我感到困惑 class MyClass type property def a self return 1 class MyObject object metaclass MyClass a 2 print MyObject
  • 改变字典的哈希函数

    按照此question https stackoverflow com questions 37100390 towards understanding dictionaries 我们知道两个不同的字典 dict 1 and dict 2例
  • Python 分析:“‘select.poll’对象的‘poll’方法”是什么?

    我已经使用 python 分析了我的 python 代码cProfile模块并得到以下结果 ncalls tottime percall cumtime percall filename lineno function 13937860 9

随机推荐

  • 功能测试基础之操作测试

    功能测试基础之操作测试 文章目录 功能测试基础之操作测试 操作测试简述 操作测试的验证标准 操作测试简述 操作测试主要是检验系统中的操作对象 菜单 按钮和输入框等 的设计是否符合软件设计标准和用户的操作习惯 页面内的各对象焦点是否顺序一致
  • vue 监听返回按钮

    移动端当用户使用默认返回按钮的时候 或左滑 或点击返回键 这时候需要监听返回按钮 1 挂载完成后 判断是否支持popstate mounted if window history window history pushState histo
  • 给出两个有序的整数数组A和B,请将数组B合并到数组A中,变成一个有序的数组。

    题目 一 给出两个有序的整数数组A和B 请将数组B合并到数组A中 变成一个有序的数组 注意 可以假设A数组有足够的空间存放B数组的元素 A和B中初始的元素数目分别为m和n public void merge int A int m int
  • Ubuntu 创建本地 Git 并与 Github(私有库) 交互(上传与下载)

    1 创建本地git并上传至github 首先先附上基础的教程 写的挺靠谱的 有一点值得注意 如果还不想公开自己的代码 记得在github上创建新库的时候点那个私有的选项 https www cnblogs com sawyer22 p 92
  • eclipes快捷键使用说明

    Ctrl 1 快速修复 最经典的快捷键 就不用多说了 Ctrl D 删除当前行 Ctrl Alt 复制当前行到下一行 复制增加 Ctrl Alt 复制当前行到上一行 复制增加 Alt 当前行和下面一行交互位置 特别实用 可以省去先剪切 再粘
  • Error during artifact deployment. See server log for details.

    实体类的double改成Double竟然启动报错这个 你敢信 感觉是这get的问题 还以为是打包出问题了 浪费好多时间 服 public Integer getOrderY return int y 5 public void setOrd
  • C#web启用目录查询功能

    当出现如下情况 直接找到iis安装目录 C Program Files IIS Express 然后cmd打开黑窗口 进入iis安装目录 cd C Program Files IIS Express 然后执行命令 把如图提示的命令 appc
  • 11个点告诉你 如何用Docker+jenkins 运行 python 自动化

    一 实现思路 在 Linux 服务器安装 docker 创建 jenkins 容器 根据自动化项目依赖包构建 python 镜像 构建自动化 python 环境 运行新的 python 容器 执行 jenkins 从仓库中拉下来的自动化项目
  • 浩辰CAD2021中文版

    教程 1 下载解压压缩包文件 得到64 32位安装包及文件 根据系统选择合适的安装包运行 进入安装引导界面 资源地址在评论区 2 进入安装引导后 选择软件的安装目录 正常默认即可 有需要的话也可自行更改 别忘记勾选同意软件许可协议 3 点击
  • 资深java软件工程师给大家的忠告

    java学习这一部分其实也算是今天的重点 这一部分用来回答很多群里的朋友所问过的问题 那就是我你是如何学习Java的 能不能给点建议 今天我是打算来点干货 因此咱们就不说一些学习方法和技巧了 直接来谈每个阶段要学习的内容甚至是一些书籍 这一
  • tomcat 虚拟节点

  • ContextLoaderListener作用详解

    ContextLoaderListener作用详解 1 目的 了解ContextLoaderListener的作用 2 作用 2 1 ContextLoaderListener监听器 1 ContextLoaderListener监听器的作
  • python利用opencv进识别行红绿灯

    目录 一 使用步骤 1 引入库 2 读入数据 3 获取帧率 4 创建函数将鼠标在图片中点击的坐标储存 5 逐帧采集视频并显示一帧图片来选择roi区域 6 最后逐帧采集视频并且放入循环一帧一帧的判断感兴趣区域中亮起的灯是哪个 二 全部代码 总
  • ChatGPT入门教程大纲

    第一部分 ChatGPT基础知识 ChatGPT概述 什么是ChatGPT ChatGPT的应用领域 ChatGPT的工作原理 语言模型和深度学习的概念 Transformer架构的介绍 预训练和微调的过程 ChatGPT的应用案例 与Ch
  • Linux·libusb源码编译

    libusb系列 Linux下libusb源码编译 源码下载及解压 下载源码 解压下载的源码压缩包 打开终端 准备编译环境 安装make dh autoreconf 安装 libudev dev sudo autogen sh sudo c
  • 使用函数指针,实现一个实用的C语言框架

    在上一篇 Qt动态库加载之 QLibrary 一文中 和大家分享了Qt 编译和调用C动态库的方法 在动态库中 我们使用了函数指针 借用函数指针实现C语言中的 多态 其次 在库中我们实现固定的算法和业务 将可能会更改的部分以接口的形式抛出 用
  • Android架构之MVC、MVP、MVVM

    转载请注明链接 https blog csdn net feather wch article details 79729132 Android架构 MVC MVP MVVM与模块化 组件化 版本 2019 3 2 1 10 00 文章目录
  • ftp上传显示服务器错误,FTP文件夹错误:打开FTP服务器上的文件夹时发生错误

    问题描述 通过我的电脑或资源管理器连接FTP服务器时提示 FTP文件夹错误 打开FTP服务器上的文件夹时发生错误 请检查是否有权限访问该文件夹 详细信息 The operation timed out 今天在用我的电脑 也就是资源管理器连接
  • jenkins blueocean使用

    jenkins blueocean使用 docker方式安装jenkins docker pull jenkinsci blueocean docker volume create jenkins data 创建jenkins data卷
  • PySimpleGUI库创建python代码的图形窗口

    目录 前言 1 pip install PySimpleGUI安装后导入包 2 界面布局设置 3 event和Values详解 4 依据输入更新窗口的显示 5 窗口的字体等设置 6 可用控件列表 7 内置Button 8 target参数