当前位置:   article > 正文

【GUI】Python图形界面(一)_python窗口设计主题

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
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/IT小白/article/detail/531671
推荐阅读
相关标签
  

闽ICP备14008679号