在平时的工作和学习中,我们经常会编写一些简单的PythonGUI工具来完成各种自动化任务,比如批量处理文件,批量处理图片等等。我们在编写这些工具时,往往只关注功能的实现,而忽略了页面的美化,这也使得用Python构建的GUI程序在人们眼中的地位相对较低。今天我们先忽略函数,重点是页面的美化,让我们看看用纯Python写的GUI程序也可以很漂亮!页面布局我们首先完成一个基本的GUI布局。假设我们要做一个二进制转换的工具,大致布局如下:上图完全是通过Python自带的GUI库tkinter编写的。部分代码如下fromtkinterimportttkfromtkinterimport*classTransform():def__init__(self):self.root=Tk()self.root.title("基础转换工具")self.root.geometry("600x280")self.root.resizable(False,False)self.var=StringVar()self.values=['2','8','10','16','32','36','58','62']self.myWidget()self.myLayout()defmyWidget(self):self.container=Frame(self.root)#变换设置区域self.lf_group1=LabelFrame(master=self.container,text="conversionsettings")selfcb=Checkbutton(self.lf_group1,text="是否自动转换")self.cb.invoke()self.bt=Button(self.lf_group1,text='conversion')self.en=Entry(self.lf_group1,text='警告ng')#基地选择区域self.lf_group2=LabelFrame(master=self.container,text="基地选择")self.lb1=Label(self.lf_group2,text="请选择要转换的基地")self.cbo1=ttk.Combobox(master=self.lf_group2,values=self.values)self.cbo1.set(self.values[2])self.lb2=Label(选择2后,lf_group="请base")self.cbo2=ttk.Combobox(master=self.lf_group2,values=self.values,)self.cbo2.set(self.values[0])txself#lf区域输出master=self.container,height=5,width=50)defmyLayout(self):self.container.pack(side=LEFT,fill=BOTH,expand=YES,padx=5)self.lf_group1.pack(fill=X,side=TOP)self.lf_group2。pack(fill=X,pady=10,side=TOP)self.cb.pack(side=LEFT,expand=YES,padx=5,fill=X)self.bt。包(边=左,展开=是,padx=5,填充=X)self.en.pack(边=左,展开=是,padx=5,fill=X)self.lb1.pack(side=LEFT,expand=YES,padx=5)self.cbo1.pack(side=LEFT,expand=YES,pady=5)self.lb2.pack(side=LEFT,expand=YES,padx=5)self.cbo2.pack(side=LEFT,expand=YES,pady=5)self.txt.pack(side=LEFT,anchor=NW,pady=5,fill=BOTH,expand=YES)defrun(self):self.container.mainloop()if__name__=='__main__':trans=Transform()trans.run()代码并不复杂,布局也是最basicpackused整个GUI程序虽然看起来很整洁,但是颜色单调,每个组件都不是很漂亮。接下来我们对页面进行美化。我们首先手动设置CSS来美化页面。这里我们主要使用tkonter库的config。Properties首先我们设置背景色self.container.config(bg='#073642')对于整体容器container,我们设置背景色为#073642然后分别设置每个组件的样式self.lf_group1.config(bg='#073642',fg="white")self.lf_group2.config(bg='#073642',fg="white")self.cb.config(bg='#073642',selectcolor='#073642',activebackground='#073642',activeforeground='#073642',fg="white")self.bt.config(bg="azure3")self.en.config(highlightbackground="#0b5162",highlightcolor="#0b5162",insertofftime=500,inserttontime=500,fg="Gainsboro",insertbackground="Gainsboro",sbg="#073642",highlightthickness=2,olref="")self.lb1.config(bg='#073642',activebackground='#073642',activeforeground='#073642',fg="white")self.lb2.config(bg='#073642',activebackground='#073642',activeforeground='#073642',fg="white")self.txt.config(insertofftime=500,inserttontime=500,fg="Gainsboro",insertbackground="Gainsboro",bwrap="gone",='#073642')都是通过配置设置的。颜色的选择,可以通过在线颜色选择器https://tools.kalvinbg.cn/dev来选择...接下来我们设置下拉框的样式,对于下拉框组件,还是有一些属于ttk组件的特殊组件,所以需要通过主题设置样式,代码如下combostyle=ttk.Style()combostyle.theme_create('combostyle',parent='alt',settings={'TCombobox':{'configure':{'foreground':'white','replectBackground':'#073642',#选择选择的的的颜色'fieldbackground':'#073642',#下拉框下拉框??'backickent':'#073642':'#073642',#Dropbuttonbackgroundcolor"FONT":10,#Fontsize}}))Combostyle.theme_use_use('Combostyle')这样我们整个GUI程序的风格就设置好了,最后的效果也能看得很清楚,最后效果一目了然,最终效果一目了然,最终效果一目了然。颜值提升了好几个档次!使用ttkbootstrap美化页面当然我们还有一个更简单有效的美化页面的方法,那就是使用ttkbootstrap库来美化页面。首先通过pippipinstallttkbootstrap安装ttkbootstrap库,然后在项目中引用该库importttkbootstrapasttkfromttkbootstrap.constantsimport*classMainCreator(ttk.Window):def__init__(self):super().__init__("Baseconversiontool",themename="solar",resizable=(False,False))#这个时候我们在完成组件的时候设置一个主题布局时,页面的整体风格变成了主题solar的风格。当然我们还是可以在不同的组件中添加bootstyle属性来实现更多多种形式效果defcreate_frame(self):"""创建所有框架小部件"""container=ttk.Frame(self)container.pack(side=LEFT,fill=BOTH,expand=YES,padx=5)color_group=ttk.Labelframe(master=container,text="转置设置",padding=10)color_group.pack(fill=X,side=TOP)self.cb=ttk.Checkbutton(color_group,text="是否自动转置",variable=self.cbvar)self.cb.invoke()self.bt=ttk.Button(color_group,text='转换',bootstyle='success')self.en=ttk.Entry(color_group,text='warning',bootstyle='warning')self.cb.pack(side=LEFT,expand=YES,padx=5,fill=X)self.bt.pack(side=LEFT,expand=YES,padx=5,fill=X)self.en.pack(side=LEFT,expand=YES,padx=5,fill=X)cr_group=ttk.Labelframe(master=container,text="进入制选",padding=10)cr_group.pack(fill=X,pady=10,side=TOP)值=['2',8','10','16','32','36','58','62']cr3=ttk.Label(cr_group,text="请选择要转换的基数")cr3.pack(side=LEFT,expand=YES,padx=5)self.cbo1=ttk.Combobox(master=cr_group,values=values,)self.cbo1.pack(side=LEFT,expand=YES,pady=5)self.cbo1.set(values[2])cr5=ttk.Label(cr_group,text="转换后请选择base")cr5.pack(side=LEFT,expand=YES,padx=5)self.cbo2=ttk.Combobox(master=cr_group,values=values,)self.cbo2.pack(side=LEFT,expand=YES,pady=5)self.cbo2。设置(值[0])self.txt=ttk.Text(master=container,height=5,width=50,wrap="none")self.txt.pack(side=LEFT,anchor=NW,pady=5,fill=BOTH,expand=YES)最终效果如下:可见使用这个库整体效果还是比手动添加CSS样式漂亮,也方便!以上就是本次分享的全部内容。觉得文章还不错的话,请关注公众号:Python编程学习圈,每日干货分享,发送“J”还能收到海量学习资料,涵盖Python电子书和教程,数据库编程、Django、爬虫、云计算等或者去编程学习网了解更多编程技术知识。
