第1章 自定义界面-基本代码

1.  创建一个最基本的界面

1.1  弹窗

import PySimpleGUI as sg

sg.Popup("一个简单的弹窗!")   # 单行文本!


   sg.Popup("第1行内容!","第2行内容!","第3行内容!") # 多行文本!

# text = '''  文本内容!    '''
# sg.Popup(text)   # 多行文本!

  效果如下:

第1章 自定义界面-基本代码

1.2  基本框架---模板代码的组成

# 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("测试窗口", layout)

# 4)事件循环
while True:
    event, values = window.read()  # 窗口的读取,有两个返回值(1.事件;2.值)
    # print(event,values)

    if event == None:  # 窗口关闭事件,设置一个出口跳出循环
        break

# 5)关闭窗口
window.close()

2.  主题

2.1  查看有效主题

import PySimpleGUI as sg

sg.theme_previewer()
print(sg.theme_list()) # 获取有效主题名称

2.2  选择主题

import PySimpleGUI as sg

sg.theme("主题名称")
sg.theme("")   # 随机主题

2.3  修改主题部分设置

import PySimpleGUI as sg

sg.theme("LightGreen3")
sg.theme_button_color("black","#6df85")   # 修改LightGreen3的按钮颜色

3.  事件的介绍

3.1  窗口关闭事件

# 第1种:
    if event == None:  # 窗口关闭事件
        break

# 第2种:
    if event == sg.WIN_CLOSED:    # 窗口关闭事件
        break

3.2  按钮点击事件

    if event =="确认":    # 点击确认按钮后,判断事件是否发生
        print("确认")     # 事件发生时要处理的任务
        sg.Popup("执行确认任务!")

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

# 第1种
    if event =="exit":
        sg.Popup("你点击了exit按钮!")
        break

# 第2种
    if event in("exit",None):        # 事件为exit或None
        sg.Popup("你点击了exit或窗口关闭!")
        break

# 第3种
    if event.startswith("exit"):     # 事件的前4个字母为exit
        sg.Popup("你点击了exit按钮!")
        break

# 第4种
    if event.endswith("exit"):      # 事件的后4个字母为exit
        sg.Popup("你点击了exit按钮!")
        break

 3.2.2  按钮事件-案例

# 1)导入模块
import PySimpleGUI as sg

# 2)定义布局,确定行数
layout = [
    [sg.Text("请输入基本信息!")],
    [sg.Text("姓名"),sg.InputText(enable_events=True,key="-XM-")],
    [sg.Text("性别"),sg.InputText(enable_events=True,key="-XB-")],
    [sg.Text("电话号码"),sg.InputText(enable_events=True,key="-DH-")],
    [sg.Button("确认"),sg.Button("取消")],
]

# 3)创建窗口
window = sg.Window("测试窗口",layout)

# 4)事件循环
while True:
    event,values = window.read()
    # print(event,values)

    if event == "确认":
        sg.Popup("你提交的信息如下!",
                 "姓名:"+values["-XM-"],
                 "性别:" + values["-XB-"],
                 "电话号码:" + values["-DH-"],keep_on_top=True
                 )

    if event == None:
        break

# 5)关闭窗口
window.close()

  效果如下:第1章 自定义界面-基本代码

 

 

3.3  其他事件(文本元素、输入框、下拉菜单)

  1)像文本元素、输入框、下拉菜单等事件默认属性是关闭的,当手动设置他们的事件属性(enable_event=True)为真时,他们也将具备事件属性。

  2)未设置key值时,事件默认的event为第一个元素。

layout = [[sg.Text("OK",enable_events=True)]]    # 打开时间属性,点击文本时会触发弹窗  
...

if event == "OK":
    sg.Popup("文本元素事件为ok,即弹窗!")

  3)设置key值时,事件的event为key值。

layout = [[sg.Text("OK",enable_events=True,key="-WB-")]]    
...

if event == "OK":
    sg.Popup("不会弹窗的哦!")

if event == "-WB-":
    sg.Popup("弹窗!")

4.  值的介绍

  窗口读取返回值,值的两种获取方式

  • 通过列表索引获取返回值-值。
  • 通过字典的键获取返回值-值。
# 第1种:通过列表的索引获取返回值。默认是通过列表获取。values[位置序号]
    if event =="确认":
        print(values[1])       # 打印第2行元素的值

# 第2种:通过字典的键获取返回值。
    # 当给元素设定唯一标识符key,则该元素无法通过列表索引,只能通过字典key进行索引。values[key]
    layout = [
        [sg.Text("请输入基本信息!")],
        [sg.Text("姓名"), sg.InputText(key="-XM-")]]   # key建议首字母为大写,“ - ”不能少。
while True:
    event, values = window.read()  
    
    if event == "确认":
        print(values["-XM-"])  # 打印姓名的值

5.  自定义窗口

5.1  for循环简介---它可以遍历任何序列的项目

str1 = "abcd1234"
list1 =["乔治","佩琪","佩德罗"]

# for i in str1:
for i in list1:
    print(i)

>>乔治
>>佩琪
>>佩德罗

5.2  配合使用for循环,自定义窗口

# 1)导入模块
import PySimpleGUI as sg

# 2)定义布局,确定行数
str = "ABCD"
# 第1种: # 注意:有两个中括号的。
layout = [[sg.Text(i) for i in str]] # for循环前面是 () 时,从左向右遍历。

# 第2种 # layout = [[sg.Text(j)] for j in str] # for循环前面是 [] 时,从上向下遍历。 # 3)创建窗口 window = sg.Window("测试窗口",layout) # 4)事件循环 while True: event, values = window.read() # print(event,values) if event == None: break # 5)关闭窗口 window.close()

  效果如下:
第1章 自定义界面-基本代码

 

 5.3  布局和元素的组合方式

5.3.1  第一种布局方式

layout = [
    [sg.Text("请输入基本信息!")],
    [sg.Text("姓名"), sg.InputText(key="-XM-")],
    [sg.Text("性别"), sg.InputText()],
    [sg.Text("电话号码"), sg.InputText()],
    [sg.Button("确认"), sg.Button("取消")],
]
layout_a = [[sg.B("增加按钮")]]
layout = layout + layout_a

5.3.2  第二种布局方式

  元素间除了用“ ,” 隔开外,还可以用“ ] + [ ”替代。

layout = [
    [sg.Text("请输入基本信息!")],
    [sg.Text("姓名")]+[sg.InputText(key="-XM-")],
    [sg.Text("性别")]+[ sg.InputText()],
    [sg.Text("电话号码")]+[sg.InputText()],
    [sg.Button("确认")]+[ sg.Button("取消")],
]
上一篇:博弈论


下一篇:P2575