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\用户名\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/用户名/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()

浙公网安备 33010602011771号