pythongui⼊门实例⼤全详细教程全_python简单进阶之GUI:
PySimpleGUI案例
python简单进阶之GUI:PySimpleGUI案例
雁陎 · 2020 年 04 ⽉ 23 ⽇
<
请注意,本⽂编写于 217 天前,最后修改于 217 天前,其中某些信息可能已经过时。
> 这是简单进阶教程系列第⼆篇,本系列⽂章主要介绍那些可以很快上⼿的进阶库。
阅读本⽂前,请确保你对PySimpleGUi库有基本了解
如果没有的话,请参考
## 前⾔
> 我觉得是可以直接作为模板了,以后我需要添加⼀个新⼯具就加⼀个函数就⾏了。
## 要点
* 不同的GUI界⾯(写不同的GUI函数)可以采⽤跳转的⽅式,这样就避免了挤在⼀个GUI上的尴尬场景,也⽅便维护。
* 接上,调⽤时建议写到GUI函数内,⽽不要全局调⽤。原因有⼆,⼀是减少了加载库的时间,⽤时再调⽤;⼆是防⽌重复调⽤。
* 有时需要动态更新控件(⽐如是否可见,是否可⽤),统⼀使⽤类似`window['key'].Update(visible=False)`的代码。
* 接上,由于控件隐藏再重新显⽰时会出现布局错误,所以建议⽤`Column`把所有需要隐藏的控件放到⼀起。
* 查看图⽚,难点有⼆:⼀是放到当前窗⼝不知道放哪⾥,⽽且不容易判断⼤⼩并调整相应布局;⼆是如果是程序⽣成的图⽚,那么从哪⾥读取呢?对于问题⼀,我的解决⽅案是直接跳转到新窗⼝。对于问题⼆,我的解决⽅案是先保存,再读取。
## 效果
打开`词云图⽣成`时,程序主界⾯⾃动隐藏,点击`返回⼯具箱`,则关闭当前界⾯,回到程序主界⾯
## 代码
main.py则是我们的GUI⽂件。代码如下:
```python任务管理器进程无法关闭
import PySimpleGUI as sg
import sys
import os
program_path = os.getcwd()
cache_path = program_path+r'\cache' # 缓存⽂件路径
sg.theme('BrownBlue')
def main_gui(): # 程序主界⾯
if ists(cache_path) == False:
os.makedirs(cache_path)
frame_layout_file = [[sg.Button('批量重命名',key='mr')]]
frame_layout_anay = [[sg.Button('词云图⽣成',key='cy')]]
layout = [[ sg.Text('欢迎使⽤雁陎⼯具箱'),],
[sg.Frame(layout = frame_layout_file, title='⽂件处理', relief=sg.RELIEF_SUNKEN)],
[sg.Frame(layout = frame_layout_anay, title='分析⼯具', relief=sg.RELIEF_SUNKEN)],
[sg.Button('退出程序')]]
win_main = sg.Window('雁陎的⼯具箱', layout,font=("宋体", 15))
while True:
ev_main, vals_main = win_main.Read()
if ev_main in (None,'退出程序'):
break
if ev_main == 'mr': # 打开批量重命名界⾯
mult_rename_gui(win_main)
if ev_main == 'cy': # 打开词云图界⾯
ciyun_gui(win_main)
win_main.close()
def mult_rename_gui(win_main): # 批量重命名GUI
import mult_rename as mr
win_main.Hide() # 主界⾯隐藏
layout_mr = [
[sg.FolderBrowse('打开⽂件夹',key='folder',target='mr_text1'),sg.Combo(['重命名为hash值', 'choice 2']
,key='choice',size= (15,1),default_value='重命名为hash值'),sg.Button('重命名'),sg.Button('返回⼯具箱',key='back_mr')],
[sg.Text('你选择的⽂件夹是:',font=("宋体", 10)),sg.Text('',key='mr_text1',size=(50,1),font=("宋体", 10))],
[sg.Text('程序运⾏记录',justification='center')],
[sg.Output(size=(70, 20),font=("宋体", 10))]
]
win_mr = sg.Window('批量重命名', layout_mr,font=("宋体", 15),default_element_size=(50,1))
while True:
ev_mr, vals_mr = win_mr.Read()
if ev_mr is None or ev_mr == 'back_mr':
win_mr.close()
win_main.UnHide()
break
if vals_mr['folder']:
if vals_mr['choice'] == '重命名为hash值':
print('您选择的模式为hash值+后缀')
print('{0}正在重命名原⽂件为hash值{0}'.format('*'*10))
mr.mult_rename(vals_mr['folder'])
python入门教程非常详细wordprint('{0}重命名完毕{0}'.format('*'*10))
else:
print('请选择⼀个重命名模式')
unity游戏开发培训
else:
print('请先选择⽂件夹')
def ciyun_gui(win_main): # 词云图⽣成GUI
import ciyun as cy
win_main.Hide()
layout_c = [
[sg.Text('字体颜⾊范围:',key='font_color_range'),sg.Text('最⼩值',key='min'),sg.Spin([i for i in range(1,360)],
initial_value=190,key='min_select'),sg.Text('最⼤值',key='max'),sg.Spin([i for i in range(1,360)],
initial_value=250,key='max_select')],
[sg.Text('词云图形状:',key='shape'),sg.Combo(['⽅形', '圆形','图⽚形状'],key='shape_select',default_value='图⽚形
状',enable_events=True,size=(8,1))],
] # 有可能隐藏的控件
layout_d = [[sg.FileBrowse('打开图
⽚',key='filebrowser',target='image_shape'),sg.InputText('',key='image_shape',disabled=True)]]
# 有可能隐藏的控件2
layout = [
[sg.Text('字体颜⾊模式:',key='font_color_type'),sg.Combo(['图⽚颜⾊', '⾃定义颜
⾊'],key='font_color_type_select',default_value='⾃定义颜⾊',size=(12,1),enable_events=True)],
[sg.Text('即是按照给定图⽚的颜⾊给字上⾊还是⾃定义字体颜⾊',key='font_color_type_p')],
[sg.Column(layout_c,key='is_visible')],
[sg.Column(layout_d,key='open_image')],
[sg.Text('词云图尺⼨:',key='size'),sg.Text('宽',key='width'),sg.Spin([i for i in range(1,2001)],
initial_value=1000,key='width_select'),sg.Text('⾼',key='highth'),sg.Spin([i for i in range(1,2001)],
initial_value=800,key='higth_select')],
[sg.Text('字体:',key='font'),sg.Combo(['微软雅⿊','楷体','宋体','仿宋','⾪书','Times New Roman'],key='font_select',default_value='微软雅⿊')],
[sg.Text('背景颜⾊:',key='back_color'),sg.ColorChooserButton('颜⾊选择',key='back_color_select'),sg.Button('透明⾊点
我',key='color_none') ] ,
[sg.Text('分词模式:',key='word_split_type'),sg.Combo(['⾃定义模式', '⾃动分词模
式'],key='word_split_type_select',default_value='⾃动分词模式',size=(8,1))],
[sg.Text('注:⾃定义模式即按照你所给的词组进⾏绘制,词组之间⽤空格分隔\n⾃动分词模式即给定⼀段话,程序⾃动进⾏分词并按照频率进⾏绘制')],
[sg.Text('最⼤词数:',key='max_words'),sg.Spin([i for i in range(1,5001)],
initial_value=1000,key='max_words_select'),sg.Text('词云图上显⽰的词数量,退格键删除有问题,建议delete键')],
[sg.Text('输\n⼊\n⽂\n本'),sg.Multiline(size=(30, 10),font=("宋体", 10),key='inputtext'),sg.Text('程\n序\n运\n⾏\n记\n
录'),sg.Output(size=(30, 10),font=("宋体", 10))],
[sg.FolderBrowse('保存路
径',key='folderbrowser',enable_events=True,target='backup'),sg.InputText('wordcloud.png',key='savefile_name',enable_events=True,s (15,1)),sg.InputText('',key='file_path',disabled=True,size=(40,1))],
[sg.Button('开始⽣成!',key='generate'),sg.Button('保存图⽚',key='saveas'),sg.Button('返回⼯具
箱',key='back'),sg.Text('',key='backup',visible=False)]
]
window = sg.Window('词云图⽣成', layout,font=("宋体", 12),default_element_size=(50,1))
while True:电工plc编程
event, values = window.Read()
if event in (None,'back'):
window.close()
win_main.UnHide()
break
if event == 'font_color_type_select': # 判断字体颜⾊模式并隐藏相应控件
if values['font_color_type_select'] == '图⽚颜⾊':
window['shape_select'].Update('图⽚形状')
window['is_visible'].Update(visible=False)
else:
window['is_visible'].Update(visible=True)
if event == 'shape_select': # 判断形状模式并决定是否隐藏打开⽂件控件
if values['shape_select']=='图⽚形状':
window['open_image'].Update(visible=True)
else:
window['open_image'].Update(visible=False)
if event == 'color_none': # 判断是否选择透明背景⾊
bgcolor = 'none'
else:
if values['back_color_select']:
bgcolor = values['back_color_select']
else:
bgcolor = 'none'
if event == 'generate':
color_type = values['font_color_type_select']
if color_type == '图⽚颜⾊':
n,m=(0,0)
else:
n = min(values['min_select'],values['max_select'])
m = max(values['min_select'],values['max_select'])
dos查看文件命令
font = values['font_select']
w,h = (values['width_select'],values['higth_select'])
shape = values['shape_select']
if shape =='图⽚形状':
image_path = values['filebrowser']
if image_path == '':
print('请选择图⽚!')
break
else:
image_path = ''
segment_mode = values['word_split_type_select']
text = values['inputtext']
相对路径改成绝对路径maxword = values['max_words_select']
try:
wordcloud = cy.generate(color_type,n,m,font,image_path,bgcolor,w,h,shape,segment_mode,text,maxword) except ValueError:
print('请输⼊⽂本!')
break
<_file('cache\image.png')
image_view('cache\image.png')
print('词云图⽣成成功')
if event in ('folderbrowser','savefile_name','saveas'):
window['file_path'].update(values['folderbrowser']+'/'+values['savefile_name'])
if event == 'saveas':
print(values['file_path'])
try:
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论