• 【GUI】Python图形界面(一)


    Python图形界面

    一、第一个界面

    1. 了解模块代码的组成

    • 导入库.(PySimpleGUI)
    • 定义布局,确定行数
    • 创建窗口
    • 事件循环
    • 关闭窗口
    # 1.导入库
    import PySimpleGUI as sg
    
    # 2.定义布局,确定行数
    layout = [
        [sg.Text('请输入您的信息')],
        [sg.Text('姓名'),sg.InputText('小帽')],
        [sg.Text('性别'),sg.InputText('男')],
        [sg.Text('国籍'),sg.InputText('中国')],
        [sg.Button('确定'),sg.Button('取消')]
    ]
    
    # 3.创建窗口
    window = sg.Window('Python GUI', layout)
    
    # 4.事件循环
    while True:
        event, values = window.read()   # 窗口的读取,有两个返回值(1.事件,2.值)
        if event == None:   # 窗口关闭事件
            break
    
    # 5.关闭窗口
    window.close()
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23

    请添加图片描述

    二、如何定义窗口返回值 – 事件

    1. 窗口关闭事件 。

    • 窗口关闭按钮是一个特殊的按钮,在界面的右上角X
    • 编写方法:
    if event==None:#窗口关闭事件
    	break
    if event==sg.WIN_CLOSED:#窗口关闭事件
    	break
    
    • 1
    • 2
    • 3
    • 4
    • 注意!!!
      • 定义窗口关闭事件是至关重要的,当你忘记定义窗口关闭事件,然后又点击了窗口右上角的X按钮,
      • 它会默默的消耗你100%的CPU。

    2. 按钮点击事件

    if event=='确认':   #判断事件是否发生
    	print('确认')     #事件发生时要处理执行的任务
    	sg.Popup('执行确认任务')
    
    if event=='取消':   #判断事件是否发生
    	print('取消')     #事件发生时要处理执行的任务
    	sg.Popup('执行取消任务') 
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    3. 判断事件是否发生的几种方式

    if event=='Exit':
    	sg.Popup('您点击了Exit')
    	break            
    
     if event in ('Exit',None):
    	sg.Popup('您点击了Exit或者窗口关闭按钮')
    	break
    
     if event.startswith('确认'):
    	sg.Popup('您点击了Exit**的按钮')
    	break
    
    if event.endswith('确认'):
    	sg.Popup('您点击了**Exit的按钮')
    	break
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

    4. 其他元素事件

    • 像文本元素,输入框,下拉菜单等事件属性默认是关闭的。 当手动设置他们的事件属性enable_events=True为真时,他们也将具有事件属性。
    # 以文本元素举例
    layout=[[sg.Text('OK',enable_events=True)]]
    ...
    if event=='OK':
    	sg.Popup('文本元素OK的事件属性为真')
    
    • 1
    • 2
    • 3
    • 4
    • 5

    5. 总结代码

    # 1.导入库
    import PySimpleGUI as sg
    
    # 2.定义布局,确定行数
    layout = [
        [sg.Text('请输入您的信息')],
        [sg.Text('姓名',enable_events=True),sg.InputText('小帽')],
        [sg.Text('性别'),sg.InputText('男')],
        [sg.Text('国籍'),sg.InputText('中国')],
        [sg.Button('确认'),sg.Button('取消')]
    ]
    
    # 3.创建窗口
    window = sg.Window('Python GUI', layout)
    
    # 4.事件循环
    while True:
        event, values = window.read()   # 窗口的读取,有两个返回值(1.事件,2.值)
        if event == None:   # 窗口关闭事件
            break
        if event == '确认':
            sg.Popup('执行了确认任务')
        if event == '取消':
            sg.Popup('执行了取消任务')
        if event == '姓名':
            sg.Popup('这是个文本')
    
    # 5.关闭窗口
    window.close()
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29

    三、窗口读取返回值 – 值

    1. 通过列表索引获取返回值-值

    list=[1,2,3,4,5]
    print(list)
    # 输出结果为:[1, 2, 3, 4, 5]
    print(list[0])
    # 输出结果为:1
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 那么如何通过列有索引来获取窗口的返回值呢?
      • 方法一:获取界面全部的值 print(values)
      • 方法二:获取界面指定的值 print(values[0]) ,print(values[1])
    # 1.导入库
    import PySimpleGUI as sg
    
    # 2.定义布局,确定行数
    layout = [
        [sg.Text('请输入您的信息')],
        [sg.Text('姓名'),sg.InputText('小帽')],
        [sg.Text('性别'),sg.InputText('男')],
        [sg.Text('国籍'),sg.InputText('中国')],
        [sg.Button('确认'),sg.Button('取消')]
    ]
    
    # 3.创建窗口
    window = sg.Window('Python GUI', layout)
    
    # 4.事件循环
    while True:
        event, values = window.read()   # 窗口的读取,有两个返回值(1.事件,2.值)
        if event == None:   # 窗口关闭事件
            break
        if event == '确认':
            # print(values)
            print(values[0])
    
    # 5.关闭窗口
    window.close()
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26

    2. 通过字典的键获取返回值-值

    • 界面默认的返回值是通过列表索引获得指定值
    • 但是当给元素设定唯一标识符key
    • 则该元素无法通过列表索引
    • 只能通过字典key进行索引。
    • print(values[key])
    # 1.导入库
    import PySimpleGUI as sg
    
    # 2.定义布局,确定行数
    layout = [
        [sg.Text('请输入您的信息')],
        [sg.Text('姓名'),sg.InputText('小帽', key='name')],
        [sg.Text('性别'),sg.InputText('男')],
        [sg.Text('国籍'),sg.InputText('中国')],
        [sg.Button('确认'),sg.Button('取消')]
    ]
    
    # 3.创建窗口
    window = sg.Window('Python GUI', layout)
    
    # 4.事件循环
    while True:
        event, values = window.read()   # 窗口的读取,有两个返回值(1.事件,2.值)
        if event == None:   # 窗口关闭事件
            break
        if event == '确认':
            print(values['name'])
    
    # 5.关闭窗口
    window.close()
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25

    四、如何设定主题

    1. 了解主题

    • 主题 theme 包括:窗口的背景颜色,文本Text颜色,按钮的字体颜色和按钮颜色等等。
    • 默认主题:“Dark Blue 3”

    2. 如何直观查看有效主题

    • 方法如下:
    import PySimpleGUI as sg	#导入库
    sg.theme_previewer()		#查看有效主题 
    
    • 1
    • 2

    3. 如何获取有效主题

    import PySimpleGUI as sg#导入库
    print(sg.theme_list()) #获取主题名称列表,并打印出来
    
    • 1
    • 2

    4. 如何设定主题

    • 设定方法:
    sg.theme('主题名称')
    # 如何随机主题:
    sg.theme('')
    
    • 1
    • 2
    • 3

    5. 总结代码

    # 导入库
    import PySimpleGUI as sg
    # sg.theme_previewer()
    # print(sg.theme_list())
    # sg.theme('DarkBlue11')
    sg.theme('')
    sg.Popup('弹窗演示')
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    五、如何修改主题

    1. 如何获取主题的部分设置

    • 获取方式:print(sg.theme_background_color())
    • 常用到的一些主题属性:
    theme_background_color                 #主题_背景_颜色
    
    theme_border_width                         #主题_边框_宽度
    
    theme_button_color                          #主题_按钮_颜色
    
    theme_element_background_color  #主题_元素_背景_颜色
    
    theme_element_text_color               #主题_元素_文本_颜色
    
    theme_input_background_color       #主题_输入框_背景_颜色
    
    theme_input_text_color                    #主题_输入框_文本_颜色
    
    theme_progress_bar_border_color#主题_进度_栏_边框_颜色
    
    theme_progress_bar_color              #主题_进度_栏_颜色
    
    theme_slider_border_width             #主题_滑块_边框_颜色
    
    theme_slider_color                          #主题_滑块_颜色
    
    theme_text_color                             #主题_文本_颜色
    
    theme_text_element_background_color #主题文本元素背景颜色 
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25

    2. 如何修改主题的部分设置

    import PySimpleGUI as sg
    sg.theme('LightBlue2')
    sg.Popup('弹窗演示')
    # 修改部分主题设定
    sg.theme_button_color(('black','#7186C7')) 
    sg.popup('修改后的LightGreen3 Theme','按钮文字是黑色的')
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    3. 总结代码

    # 导入库
    import PySimpleGUI as sg
    sg.theme('LightBlue2')
    sg.Popup('弹窗演示')
    # print(sg.theme_button_color()) # ('#FFFFFF', '#7186C7') 按键文字的参数,按键背景的参数
    sg.theme_button_color(('black','#7186C7'))
    sg.popup('演示弹窗','按键字体变黑色')
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    六、如何自定义窗口

    1. 用for循环快速定义元素

    # for循环遍历字符串                  
    a='djfsdldkfj'
    for i in a:                                    
    	print(i)
    	                                                                     
    # for循环遍历列表
    a=[1,23,'A','程序员']
    for i in a:
    	print(i)                                  
    
    layout=[[sg.In(i) for i in 'ABCD']]
    # 用for循环遍历字符串的形式布局
    
    layout=[[[sg.In(i)] for i in ['北京','上海','深圳']]]
    #用for循环遍历列表的形式布局
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

    2. 布局和元素的另一种组合方式

    # 最常见的布局定义方式
    layout=[
    
    [sg.Text('请输入基本信息')]
    
    [sg.Text('姓名'),sg.In()],
    
    [sg.Text('性别'),sg.In()],
    
    [sg.Text('籍贯'),sg.In()],
    
    [sg.B('确认'),sg.B('取消')]
    
    ]
    
    # 用+号拼接的方式:
    layout=[
    
    [sg.Text('请输入基本信息')],
    
    [sg.Text('姓名')]+[sg.In()]]+[
    
    [sg.Text('性别')]+[sg.In()]]+[
    
    [sg.Text('国籍'),sg.In()],
    
    [sg.B('确认'),sg.B('取消')]
    
    ]   #在同一个布局里也可以用加号拼接。
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29

    3. 总结代码

    # 1.导入库
    import PySimpleGUI as sg
    
    # 2.定义布局,确定行数
    # layout = [
    #     [sg.Text(i) for i in 'abcd'],
    #     [[sg.In(i)] for i in ['纽约','伦敦','巴黎','东京']]
    # ]
    
    layout=[
    
    [sg.Text('请输入基本信息')],
    
    [sg.Text('姓名')]+[sg.In()]]+[
    
    [sg.Text('性别')]+[sg.In()]]+[
    
    [sg.Text('国籍'),sg.In()],
    
    [sg.B('确认'),sg.B('取消')]
    
    ]
    
    # 3.创建窗口
    window = sg.Window('Python GUI', layout)
    
    # 4.事件循环
    while True:
        event, values = window.read()   # 窗口的读取,有两个返回值(1.事件,2.值)
        if event == None:   # 窗口关闭事件
            break
        if event == '确认':
            print(values['name'])
    
    # 5.关闭窗口
    window.close()
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
  • 相关阅读:
    字节跳动端智能工程链路 Pitaya 的架构设计
    1106 2019数列 (递归+题外话)
    ORA-16171当DG出现GAP的时候,如何强制启动备库
    Java-KoTime:热更新-不重启替换代码
    关于硕士论文盲审的一些感受
    遗传算法(GA)求解基于栅格地图的机器人最优路径规划,可以自行修改地图(提供MATLAB代码)
    IP协议详解
    容器批量计算调度引擎Volcano v1.2版本后的资源预留
    JVM:运行时数据区-方法区
    ARM接口编程—GPIO(exynox 4412平台)
  • 原文地址:https://blog.csdn.net/sgsgkxkx/article/details/125008605