python学习笔记第12章:图形界面编程

时间:2021-08-07
本文章向大家介绍python学习笔记第12章:图形界面编程,主要包括python学习笔记第12章:图形界面编程使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

12.1 PysimpleGUI

1.示例

import PySimpleGUI as sg

import tools

'''

'''

#0.数据定义

#一.相关函数

def gui():

    #sg.theme_previewer()      #所有主题预览

    #sg.preview_all_look_and_feel_themes()   #所有主题预览

    sg.theme('SystemDefault')

    menu_def = [

                ['&File', ['&Open', '&Save', '---', 'Exit']],           # '---',分隔符

                ['Edit', ['Paste', '新窗口', '次级菜单',['次级一', '次级二', ], 'Undo'], ]

                ]

    t1 = sg.Text('表名', key='t',size=(40,1))                #文本组件名t

    t2 = sg.Text('角色名称/手机号/option',justification='center',size=(40,1))     #居中

    t3 = sg.Text('部门名称/_id')

    c_table = sg.Combo(tools.table_name, key = 'table_name', default_value='g_baitan_node_plan')   #Combo下拉框,,占用一个values,

    i1 = sg.Input('aloha', key='input1')    #输入框,如果有默认值写在最前

    i2 = sg.Input(key='input2')

    layout = [

              [sg.Menu( menu_def, key='menu', tearoff=False, pad=(20, 1))],          #菜单栏,有菜单栏时,菜单栏也占用一个values,菜单项必须第一位,wx用不了菜单

              [t1, t2, t3],

              [c_table, i1, i2],

               [sg.Input(key='cmd_input', background_color='#FBFBFF', size=(135,1))],         #执行Mongo命令的输入框

              [sg.Button('角色部门'), sg.Button('用户信息'),sg.Button('ObjectId'), sg.Button('执行命令'), sg.Button('源码查询')],

              [sg.Output(key='out1', size=(135, 20), tooltip='查询结果输出框', text_color='blue', background_color='#F0F0F0', font='Courier 10')],        #输出框,key=起名,用于后续调用

        [sg.ColorChooserButton('color',key = 'color') ]

              ]

    window = sg.Window('查询工具', layout,alpha_channel=0.95,  return_keyboard_events=True, font=("宋体", 11), grab_anywhere=False)  #打开一个窗口,透明度95%,获取键盘按键

    win2_status = 0           #新窗口标志

    while True:

        event, values = window()      #监听按钮和文本框,,values列表,values[0]是第一个文本框,如果前面有菜单栏,菜单栏是values[0]

        if event in (sg.WIN_CLOSED, 'Delete:46', menu_def[0][1][3]) and sg.popup_yes_no('确定要退出吗') == 'Yes':    #event单击事件,或键盘事件,单击红叉或者菜单里的Exit时退出,'Delete:46'删除键,获取用户弹窗点击的按钮,如果yes

            break

        elif event == '角色部门':

            window["out1"].update('')

            tools.get_phone(values["input1"],values['input2'])

        elif event == '用户信息':

            window["out1"]('')                     #清空,更新控件的内容,window["out1"]根据名字获取控件,已省略update

            tools.find_sysuser1(values["input1"])

        elif event == 'ObjectId':

            window["out1"].update('')

            tools.get_id(values["table_name"],values['input2'])

        elif event == '执行命令':

            if not values['input2']   or not values['cmd_input']:        #指定输入框没有值时

                sg.popup('请输入要执行的操作')                  #弹窗

            else:                                      #如果不用else,将导致下面的函数被执行,空值时会报错

                window["out1"].update('')

                tools.execute(values["table_name"], values["input1"], values['cmd_input'])

        elif event == '源码查询':

            window["out1"].update('')

            print("查询中")

            tools.query_code(values["input1"])

        #打开新窗口

        if not win2_status  and event == menu_def[1][1][1]:

            win2_status = 1

            img = sg.Image(r'C:\Users\zx\Desktop\abc.gif')

            layout2 = [[sg.Text('Window 2')],

                       [sg.Ok(), sg.Button('Exit')],

                       [img]]

            window2 = sg.Window('New Window', layout2)   #打开一个窗口

        if win2_status:

            events2, values2 = window2.Read(timeout=100)     #监听窗口2

            if events2 is None or events2 == 'Exit':

                win2_status = 0

                window2.close()

    window.close()

#二.执行

if __name__ == '__main__':

gui()

1. 控件

    tab1_layout = [[sg.T('This is inside tab 1')]]

    tab2_layout = [[sg.T('This is inside tab 2')],        #Text简写

                   [sg.In(key='in')]]                     #Input简写

[sg.TabGroup([[sg.Tab('Tab 1', tab1_layout), sg.Tab('Tab 2', tab2_layout)]])],     #标签页标签组

[sg.ButtonMenu('ButtonMenu', key='-BMENU-', menu_def=menu_def[0])],                #菜单按钮

[sg.InputText(), sg.FolderBrowse()],         #文件夹选择框,选择文件夹后,路径会展示在输入框中,sg.FileBrowse()文件选择,sg.FilesBrowse()文件多选

[sg.InputText(), sg.FileSaveAs()],           #保存/覆盖文件

sg.Checkbox(‘My second checkbox!’, default=True)    #多选框

sg.Radio(‘My second Radio!’, “RADIO1”)         #单选框

sg.Multiline(default_text=‘default Text’,scale=(2, 10))        #多行文本框

sg.Listbox(values=sg.theme_list(), size=(20, 12), key='list', enable_events=True)      #列表框,展示多行的下拉框

sg.Slider(range=(1, 100), orientation='h', size=(34, 20), default_value=85)            #拖动条,拖动方向 ‘h’ :横向 ‘v’:竖向,default_value=85默认值

sg.OptionMenu                                  #另一种下拉框,滚动条不好用

sg.popup_get_text('This is {}'.format(values['列表框'][0]))    #弹窗另一种

column1 = [[sg.Spin(values=('Spin Box 1', 'Spin Box 2', 'Spin Box 3'), initial_value='Spin Box 1')]]  #列表标签

sg.Column(column1, background_color='#F7F3EC')                         #列表选择框什么的

tray = sg.SystemTray(menu=['menu', ['Open', ['&Save::KEY', '---', 'Issues', '!Disabled'], 'E&xit']])  #托盘wx能用

 tray.ShowMessage('My Message', 'The tray icon is up and runnning!')                              #鼠标放在托盘时显示的文字

sg.Frame                                  #框架,块,不知道怎么用

sg.ProgressBar(1000, orientation='h', size=(140, 20), key='progbar')  #进度条,要配合for循环之类的用,‘h’ :横向 ‘v’:竖向

  window['progbar'].UpdateBar()                                         #更新进度条

sg.CalendarButton( '日历',key='calendar')                              #日历

sg.ColorChooserButton('color',key = 'color')                            #颜色选择

sg.Image('C:/Users/zx/Desktop/abc.gif')                              #图片

sg.popup_yes_no('确定要退出吗') == 'Yes'                            #弹窗不能自定义按钮,要获取用户的按键,需使用弹窗的返回值

window['input2']('haha')                                           #更新输入框

'''

'''方法

set_size(size=(None, None))

set_tooltip                                                        #提示

SetFocus                                                           #焦点

if event == 'Control_L:17':                                                     #按键,左ctrl

12.2wxPython

1. 示例

import wx

class MyFrame(wx.Frame):

    def __init__(self):

        super().__init__(parent=None, title='Hello World')         #框架

        panel = wx.Panel(self)                        

            #面板

        my_sizer = wx.BoxSizer(wx.VERTICAL)                       #动态布局器,VERTICAL垂直添加,HORIZONTAL横向添加

        #1输入文本框

        self.text_ctrl = wx.TextCtrl(panel)                       #文本框

        my_sizer.Add(self.text_ctrl, 0, wx.ALL | wx.EXPAND, 5)     #文本框添加到动态布局器,0大小为默认比例,wx.ALL边框,wx.EXPAND自动扩展,高度5,

        #2获取用户信息

        user_btn = wx.Button(panel, label='用户信息')                #按钮

        user_btn.Bind(wx.EVT_BUTTON, self.on_click_user)                  #按钮绑定单击事件,第一个参数wx.EVT_BUTTON单击,第二个参数调用的函数

        my_sizer.Add(user_btn, 0, wx.ALL | wx.CENTER, 5)             #按钮添加到动态布局器,|右侧,居中,高度5,

        # 3.标签

        self.st = wx.StaticText(panel, label="Old Label.")   

 #添加一个标签

        my_sizer.Add(self.st, 0, wx.ALL | wx.CENTER, 5)

self.st.SetLabel('new')                #修改标签内容

        panel.SetSizer(my_sizer)          #面板关联布局管理器

        self.Show()

#4. #定义单击后调用的函数

    def on_click_user(self,event):      #定义单击后调用的函数

        value = self.text_ctrl.GetValue()                  #获取文本框的输入内容

        self.st.SetLabel('new')                      #修改标签内容

        if value:

            tools.user_find(value)

if __name__ == '__main__':

    app = wx.App(True)      #True,输出内容到窗口,缺省输出到控制台

    frame = MyFrame()

    app.MainLoop()

原文地址:https://www.cnblogs.com/wakevol/p/15113257.html