• python gui(六)全局设定


    1、菜单栏 Menu

    sg.Menu()

    Menu(
    	menu_definition,
    	# 菜单栏定义
        tearoff=False,
        # 独立菜单设定,设定为True后相应的下拉菜单中显示“------”的虚线,点击虚线相应的菜单以独立窗口的方式显示。
        font=None,
        # 字体名称大小设定
        pad=None,
        # 周围元素间隔设定
        key=None,
        # 唯一标识符设定
          )
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    在这里插入图片描述

    关于menu_definition示例

    
    menu_def = [['&File', ['!&New File', '&Open File::openkey', '---', 'Open Fol&der', 'E&xit']],
                ['!&Edit', ['!&Paste', ['Cut', 'Repeat', ], 'Undo'], ],
                ['&Find', ['Find...', 'Replace']],
                ['&Tools', ['Command &1', 'Command &2', 'Command &3', 'Command &4']],
                ['&Help', '&About...'], ]
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    重点

    ‘—’ 菜单栏分割线设定

    & 快捷键标注 Alt+key(避免重复) &File其快捷键对应的是F,F&ind其对应的快捷键对应的是i,即&后面紧邻的字符为快捷键

    ! 菜单栏禁用设定

    :: 菜单key设定。作为事件的一部分。 (给具体的某个键设定key值,例如:file::file_key,此时点击file时,返回的事件名称为file::file_key)

    updata方法

    Update(
    		menu_definition=None,
     		visible=None
     		)
    
    • 1
    • 2
    • 3
    • 4
    import PySimpleGUI as sg
    
    
    menu_def = [['&File', ['!&New File', '&Open File::openkey', '---', 'Open Fol&der', 'E&xit']],
                ['!&Edit', ['!&Paste', ['Cut', 'Repeat', ], 'Undo'], ],
                ['F&ind', ['Find...', 'Replace']],
                ['&Tools', ['Command &1', 'Command &2', 'Command &3', 'Command &4']],
                ['&Help', '&About...'], ]
    
    
    layout=[[sg.Menu(menu_def,
        key='UU')]]+[[sg.In(key=i)]for i in range(5)]
    window=sg.Window('Python GUI',layout,keep_on_top=True)
    
    while True:
        event,values=window.read()
        print(event)   
        if event==None:  
            break
    
    window.close()
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    import  PySimpleGUI as sg
    
    menu_def = [['&File', ['!&New File', '&Open File::openkey', '---', 'Open Fol&der', 'E&xit']],
                ['!&Edit', ['!&Paste', ['Cut', 'Repeat', ], 'Undo'], ],
                ['&Find', ['Find...', 'Replace::Replac2']],
                ['&Tools', ['Command &1', 'Command &2', 'Command &3', 'Command &4']],
                ['&Help', '&About...'], ]
    layout = [[sg.In(i)] for i in range(5)]+\
             [[sg.Menu(menu_def,
                       tearoff=True,
                       )]]   # 虽然menu放在In后面,但是依然显示在最上面一排,
    
    windows = sg.Window('pysimplegui',layout)
    
    while True:
        event, values = windows.read()
        print(event)
        if event==None:
            break
        if event == 'Replace::Replac2':
            sg.popup("点击替换")
    
        if event == "Command 1":
            sg.popup("点击"+event)
    
    
    
    
    • 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

    2、window窗口常用属性

    
    Window(
    	title,
    	# 窗口标题设定
        layout=None,
        # 布局设定
        location=(None, None),
        # 默认窗口出现的位置
        size=(None, None),   
        # 窗口宽高设定,未设定的情况下,根据元素大小自行设定
        element_padding=None,
        # 元素间间隔设定
        button_color=None,
        # 按钮元素颜色设定(文本颜色,背景颜色)
        font=None,
        #(字体名称,字体大小)
        background_color=None,
        # 背景颜色设定
        auto_close=False,
        # 界面自动关闭设定
        auto_close_duration=3,
        # 默认为3秒,自动关闭前界面持续打开时间
        no_titlebar=False,
        # 界面无标题栏设定,没有标题栏的时候一定给他定义一个关闭窗口的事件,例如定义一个cancel按钮
        grab_anywhere=False,
        # 拖拽窗口设定。
        keep_on_top=False,
        # 如果为True,界面保持在屏幕的最前方
        resizable=False,
        # 如果为True,界面生成后可以调整大小
        disable_close=False,
        # 如果为True,窗口关闭按钮将不起作用
        disable_minimize=False,
        # 如果为True,窗口最小化按钮将不起作用
        right_click_menu=None,
        # 右击调出菜单
        transparent_color=None,
        # 界面透明设定 =sg.theme_background_color()
        element_justification="left",
        # 元素对齐方式设定。有效值 left,right,center,相对的是窗口
    		)
    
    
    • 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
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42

    在这里插入图片描述

    在这里插入图片描述

    import  PySimpleGUI as sg
    
    menu_def = [['&File', ['!&New File', '&Open File::openkey', '---', 'Open Fol&der', 'E&xit']],
                ['!&Edit', ['!&Paste', ['Cut', 'Repeat', ], 'Undo'], ],
                ['&Find', ['Find...', 'Replace::Replac2']],
                ['&Tools', ['Command &1', 'Command &2', 'Command &3', 'Command &4']],
                ['&Help', '&About...'], ]
    layout = [[sg.In(i)] for i in range(5)]+\
             [[sg.Menu(menu_def,
                       tearoff=True,
                       )]]   # 虽然menu放在In后面,但是依然显示在最上面一排,
    
    windows = sg.Window('pysimplegui',layout,
                        size=(500,500),
                        # transparent_color=sg.theme_background_color(),
                        element_justification="right"
                        )
    
    while True:
        event, values = windows.read()
        print(event)
        if event==None:
            break
        if event == 'Replace::Replac2':
            sg.popup("点击替换")
    
        if event == "Command 1":
            sg.popup("点击"+event)
    
    
    
    
    • 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

    3、Multiline多行文本框

    既可以用来输入,也可以用来输出。

    sg.Multiline()orsg.ML()

    Multiline(
    	default_text="",
        # 默认显示的文本
        disabled=False,
        # 元素禁用状态设定
        border_width=None,
        # 边界线条宽度设定
        size=(None, None),
        # 宽度和行高设定
        background_color=None,
        # 背景颜色设定
        text_color=None,
        # 文本颜色设定
        enable_events=False,
        # 元素事件属性
        key=None,
        # 元素的唯一标识符
        write_only=False,
        # 设定为True时,文本框只提供用户写入,窗口不读取。无返回值。
        reroute_stdout=False,
        # print语句内容会显示在此文本框内
        reroute_cprint=False,
        # 使用cprint将内容打印到此文本框内。详细参考sg.cprint()
        reroute_stderr=False,
        # 捕捉异常时将文本写在此元素内. sys.stderr.write('?'),一般用不到,可以使用上面两种输出方式加上print()方法就可以了。
        autoscroll=False,
        # 如果为True,更多数据添加到末尾时元素的内容将自动滚动
        focus=False,
        # 焦点设置
        font=None,
        # 字体名称和大小设定
        pad=None,
        # 和周围元素间间隔的设定
        tooltip=None,
        # 悬浮文本设定
        justification=None,
        # 对齐方式设定
        right_click_menu=None,
        # 右击调出菜单设定
        visible=True,
        # 元素可见状态设定。
        do_not_clear=True,
        # 默认为True,如果设定为False,窗口读取一次,内容就会自动清除。默认True,不要与enable_events同时设定
         )
    
    • 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
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44

    信息补充:print方法的参数分割符sep和终止符end

    a = 'a'
    b = 'b'
    print("===========sep分割符,===========")
    print(a,b)   # 默认分割符有一个空格,所以输出a和b之间有一个空格
    print(a,b,sep="")   # 修改了分割符,所以输出a和b之间没有空格
    print(a,b,sep="+")
    print("===========end终止符,===========")
    print(a)     # 每个print语句默认增加一个换行符
    print(a,end="\n")   # 等效print(a)
    print("===========修改终止符===========")
    print(a,end='---')  #相当是将默认的终止符”\n“修改为”-----“
    print(b)            # 因为上面的打印语句修改了终止符,因此语句紧跟上面语句输出
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    在这里插入图片描述

    原来print打印的内容显示在sublime输出控制台上。

    设定了reroute_stdout=True,之后
    print打印内容会显示在多行文本框内。
    则编译器的输出控制台不会显示。

    设定reroute_cprint=True,
    print打印内容会继续显示到sublime输出控制台。
    使用sg.cprint()可以讲内容打印到多行文本框。

    cprint方法

    
    cprint(
        args=*<1 or N object>,
        # 可变参数,
        end=None,
        # 结束符  默认为回车键
        sep=" ",
        # 分隔符 默认为空格键
        text_color=None,
        # 可以简写成t
        background_color=None,
        # 可以简写成b
        colors=None,
        # 可以简写成c
        key=None,
        #元素的唯一标识符
        justification=None
        #文本对齐方式)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18

    update方法

    Update(
        value=None,
        # 更新内容
        disabled=None,
        # 元素禁用
        append=False,
        # 如果设定为True,要更新的内容会接在原来文本的下方。原来的文本不会消失。
        font=None,
        # 字体大小名称设定
        text_color=None,
        # 文本颜色设定
        background_color=None,
        # 背景颜色设定
        text_color_for_value=None,
        # 更新的文本的字体颜色设定
        background_color_for_value=None,
        # 更新的文本的背景颜色设定
        visible=None,
        # 元素可见状态更新。默认可见
        autoscroll=None,
        # 更新文本是否自动滚动。默认不自动滚动
        justification=None
        # 更新文本对齐方式)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    import  PySimpleGUI as sg
    
    
    layout = [[sg.ML(
        default_text="您好",
        # disabled=True,
        # border_width=10,
        size=(50,10),   # 行高10,代表10行
        background_color="red",
        text_color="yellow",
        enable_events=True,
        key='-ML-',
        write_only=False,  # 当为True时,只能写入但是无法读写,即不返回多行文本框中内容
        # reroute_stdout=True, #print打印语句会输出到多行文本框中
        reroute_cprint=True,
        autoscroll=True,
        do_not_clear=False,  # 默认True,不要与enable_events同时设定
    
    )],
        [sg.Ok(),sg.Cancel()]
    
    ]
    windows = sg.Window('pysimplegui',layout,
                        # size=(500,500),
                        # transparent_color=sg.theme_background_color(),
                        # element_justification="right"
    
                        )
    
    while True:
        event, values = windows.read()
        # print(event)
        if event==None:
            break
        if event=="Ok":
            windows['-ML-'].update("大家好",
                                   disabled=True,
                                   append=True,
                                   text_color="red",
                                   text_color_for_value="black",
                                   autoscroll=True,
                                   justification="left"
                                   )
        if event == 'Cancel':
            sg.cprint("Cancel",
                      "--From cancel button",
                      end=";",sep='++++++',
                      # text_color="balck",
                      # background_color='white',
                      # colors=("yellow","white"),
                      justification='r',
    
                      )
    
    
    • 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
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54

    print方法

    window[key].print()

    
    print(
        args=*<1 or N object>,
        # 可变参数
        end=None,
        # 要打印的元素的结束符 默认为换行 end='\n'
        sep=None,
        # 要打印的元素的分隔符 默认为空格 sep=' '
        text_color=None,
        # 要打印的元素文本颜色
        background_color=None,
        # 要打印的元素这一行的背景颜色
        justification=None
        # 要打印的元素对齐方式
        )
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    import  PySimpleGUI as sg
    
    
    layout = [[sg.ML(
        default_text="您好",
        # disabled=True,
        # border_width=10,
        size=(50,10),   # 行高10,代表10行
        # background_color="red",
        # text_color="yellow",
        enable_events=True,
        key='-ML-',
        write_only=False,  # 当为True时,只能写入但是无法读写,即不返回多行文本框中内容
        # reroute_stdout=True, #print打印语句会输出到多行文本框中
        reroute_cprint=True,
        autoscroll=True,
        do_not_clear=False,  # 默认True,不要与enable_events同时设定
    
    )],
        [sg.Ok(),sg.Cancel()]
    
    ]
    windows = sg.Window('pysimplegui',layout,
                        # size=(500,500),
                        # transparent_color=sg.theme_background_color(),
                        # element_justification="right"
    
                        )
    
    while True:
        event, values = windows.read()
        # print(event)
        if event==None:
            break
        if event=="Ok":
            windows['-ML-'].print("123",justification='left',
                                  text_color="red",
                                  background_color="pink"
    
                                  )
        if event == 'Cancel':
            windows['-ML-'].print("456",justification='right',
                                  text_color='blue',
                                  background_color="grey"
                                  )
    
    
    • 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
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46

    垂直分割线

    
    sg.VerticalSeparator(
        color=None,
        key=None,
        pad=None
        )
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    对话框小案例

    import PySimpleGUI as sg
    
    layout=[[sg.ML(size=(60,10),reroute_cprint=True,autoscroll=True,key='-ML-')],
            [sg.In('你好!',key='-Input_A-',size=(20,1)),sg.B('Andy'),
            sg.VerticalSeparator(color='red'),
            sg.In('你好!',key='-Input_B-',size=(20,1)),sg.B('Amy')]]
    
    
    window=sg.Window('Python GUI',layout,keep_on_top=True)
    
    while True:
        event,values=window.read()
    
        if event is None:  
            break
    
        if event=='Andy':
            sg.cprint(values['-Input_A-'],'From Andy',c=('red','yellow'),justification='l',sep='  ——')
        if event=='Amy':
            sg.cprint(values['-Input_B-'],'From Amy',t='blue',justification='r',sep='  ——')
    
    window.close()
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
  • 相关阅读:
    微前端架构的理解
    上周热点回顾(3.6-3.12)
    JSTL(jsp标准标签库)
    安徽身份证网上办理最全攻略
    众享比特未来融合研究院执行院长王陈慧子博士以第一作者在IEEE TCSS上发表论文
    Tornado 异步性能分析
    金仓数据库KingbaseES物理备份恢复命令选项(help命令)
    【SpringBoot整合NoSql】-----MongoDB篇
    4万字【Python高级编程】保姆式教学,进阶感觉到吃力?学完这些就轻松了
    【Git】credential.helper
  • 原文地址:https://blog.csdn.net/Mwyldnje2003/article/details/126845346