三、代码实例
代码实例:
功能:图形界面上有一段文字,下面有一个可拖动滑块,向右拖动滑块,字体变大,向左拖动滑块,字体变小。
#! /usr/bin/python
# -*- coding: UTF-8 -*-from tkinter import * #导入模块def resize(ev = None): #回调函数,滑块移动时被激活label.config(font = "Helvetica -%d bold" % scale.get())
top=Tk() #初始化根窗口
top.geometry("400x700") #顶层窗口大小。注意!是小写字母"x",不是乘号#标签。"text"显示文本、"font"字体颜色大小
label=Label(top,text = "嗨!欢迎看到界面文字",font="Helvetica -12 bold")
#label标签其他属性。"bg"背景颜色。"bd"外围3D边界的宽度。"width"控件宽度。"heigth"控件高度#显示控件。"fill"代表按钮占据剩余水平空间(纵向),"expand"则让其填充整个水平可视空间(横向)
label.pack(fill=Y,expand = 1) #创建进度条。字号起始、终止、指定方向(此处为水平从左向右)、命令(此处是尺寸)
scale = Scale(top,from_ = 1,to = 50,orient = HORIZONTAL,command = resize) scale.set(12) #设置默认字号
scale.pack(fill=X,expand=1) #显示控件。内容同上#创建按钮。文本、命令、按下后显色、正常显色
quit = Button(top,text = "退出",command = top.quit, \activeforeground = "red",activebackground = "white")
quit.pack() #显示控件mainloop() #一般是程序运行的最后一段代码,进入主循环后,GUI从这里开始接管程序的执行
运行结果如下:
拉动下面滑块,字体会变大变小!
代码实例:
功能:图形界面上有一些按钮,这些按钮可点击,点击不同的按钮弹出不同内容的提示。
#! /usr/bin/python
# -*- coding: UTF-8 -*-from functools import partial as pto #调用相关模块
from tkinter import Tk,Button,X
import tkinter.messageboxwarn = "warn" #定义变量。警告
crit = "crit" #定义变量。错误
regu = "regu" #定义变量。正常SIGNS={"按下后核爆炸": crit,"按下后火车出轨":warn,"按下后导弹发射":crit,"按下后交通瘫痪":warn,"按下后有女朋友":regu,"按下后发大财":regu,
} #设置字典。定义相关按钮背后的任务critCB = lambda:showerror("错误!","错误!您没有相关权限") #按钮背后的实现。括号中前面是框标题,后面是框内容
warnCB = lambda:showwarning("警告!","警告!可能会发生危险") #所调用的函数是默认函数,不用自己定义
infoCB = lambda:showinfo("正常信息!","正常!成功实现了目标") #"infoCB"是函数名,随意起名top=Tk() #创建顶层窗口
top.title("普京的核按钮") #顶层窗口标题
top.geometry("300x300") #顶层窗口大小。注意中间是小写字母"x",不是乘号
Button(top,text = "退出",command = top.quit,bg = "red",fg = "white").pack() #在顶层窗口上定义按钮(top),按钮上的文字,按钮实现的任务,背景色,字体色,按钮显示(pack,否则GUI不显示按钮)#此处为偏函数
MyButton = pto(Button,top) #模板化按钮(写死某些参数并形成新的函数),新函数定义为"MyButton"
CritButton = pto(MyButton,command=critCB,bg="blue",fg="red") #再次模板化(二阶偏函数)。定义指定命令按钮(调用相关已定义函数)
WarnButton = pto(MyButton,command=warnCB,bg="yellow",fg="red")
ReguButton = pto(MyButton,command=infoCB,bg="green",fg="red")for eachSign in SIGNS: #循环已定义字典signType = SIGNS[eachSign] #字典取值cmd = "%sButton(text = %r%s).pack(fill = X,expand = True)" \%(signType.title(),eachSign,".upper()" \if signType == crit else ".title()") #"X"构件和父容器一样宽。"Y"构件和父容器一样高eval(cmd) #eval函数将字符串当成有效Python表达式来求值,并返回计算结果top.mainloop() #一般是程序运行的最后一段代码,进入主循环后,GUI从这里开始接管程序的执行
运行结果如下:
这些按钮是可以点击的,例如,我们点击 “按下后核爆炸”,会弹出提示:错误!您没有相关权限
我们点击 “按下后有女朋友”,会弹出提示:正常!成功实现了目标
代码实例:
功能:图形界面上端显示目标路径,图形界面中间显示目标路径下的所有文件,图形界面下方有一个输入栏,可以输入目标路径。
#! /usr/bin/python
# -*- coding: UTF-8 -*-import os #导入相关模块
from time import sleep
from tkinter import *class DirList(object): #定义类,继承默认object类def __init__(self,initdir=None): #定义类内初始函数,接收一个参数,若无接收为Noneself.top = Tk() #创建顶层窗口self.label = Label(self.top,text = "目录") #顶层窗口的标签(在窗口主体中显示),和标题有区别(在最顶层显示)self.label.pack() #顶层窗口中的标签(label)显示出来self.cwd = StringVar(self.top) #StringVar:字符串变量,特点是跟踪变量变化,及时显示在界面上self.dirl=Label(self.top,fg="blue",font=("Helve",12,"bold")) #当前目录显示标签self.dirl.pack() #dirl的显现#定义GUI核心部分,用包含列表框和滚动条的框架显示self.dirfm = Frame(self.top) #"frame"在屏幕上创建一块矩形区域,作为容器来布局窗器self.dirsb = Scrollbar(self.dirfm) #垂直滚动控件,调用上条self.dirsb.pack(side = RIGHT,fill = Y) #显示。将列表框放置在右侧,并且填满竖直方向self.dirs=Listbox(self.dirfm,height=15,width=50,yscrollcommand=self.dirsb.set) #在框中显示一个列表字符串给用户。"yscrollcommand"垂直滚动回调,水平用"x"。调用之前已定义的self.dirs.bind("<Double-1>",self.setDirAndGo) #"bind"绑定事件。绑定"setDirAndGo"函数self.dirsb.config(command=self.dirs.yview) #配置。滑动框与列表关联。滚动条对列表框进行竖直方向的滚动self.dirs.pack(side = LEFT,fill = BOTH) #列表放置在左侧,并且填满框架的剩余空间self.dirfm.pack() #dirfm显示#定义输入框,收集键盘输入self.dirn=Entry(self.top,width=50,textvariable=self.cwd) #在Entry中设定初始值,使用textvariable将变量与Entry绑定。"entry"输入单行文本self.dirn.bind("<Return>",self.doLS) #"bind"绑定事件。此处为按下回车键调用查询函数self.dirn.pack() #dirn显示#下方为偏函数self.bfm = Frame(self.top) #框架控件。显示一个矩形区域,用来作为容器self.clr = Button(self.bfm,text = "清空",command = self.clrDir,activeforeground = "white",activebackground = "blue") #按钮控件。调用已设函数,实现清空功能self.ls = Button(self.bfm,text = "列表",command = self.doLS,activeforeground = "white",activebackground = "green") #按钮控件。调用已设函数。实现查询功能self.quit = Button(self.bfm,text = "退出",command = self.top.quit,activeforeground = "white",activebackground = "red") #按钮控件。调用内置函数,实现退出功能self.clr.pack(side = LEFT) #清空功能按钮显现self.ls.pack(side = LEFT) #查询功能按钮显现self.quit.pack(side = LEFT) #退出功能按钮显现self.bfm.pack() #框架容器区域显现if initdir: #如果为真(有东西)则执行self.cwd.set(os.getcwd()) #"self.cwd"是变量名。"set"设置文本框中的值为当前绝对路径self.doLS() #调用查询函数def clrDir(self,ev = None): #函数实现清空功能self.cwd.set("") #"set"设置文本框中的值def setDirAndGo(self,ev = None): #设置要遍历的目录。双击文本框中的条目时触发该函数self.last = self.cwd.get() #"get"获取文本框中的值self.dirs.config(selectbackground = "red") #配置。选中时背景颜色check=self.dirs.get(self.dirs.curselection()) #获取文本框中的值。"curselection"返回一个包含选定的元素或元素的行号,从0开始计数if not check:check = os.curdir #返回当前目录"."self.cwd.set(check) #设置文本框中的值self.doLS() #调用查询函数,实现目录遍历行为def doLS(self,ev = None): #定义查询函数error = "" #赋予变量"error"一个空值tdir = self.cwd.get() #"get"获取文本框中的值if not tdir:tdir = os.curdirif not os.path.exists(tdir): #判断输入框中文件是否存在error = tdir+":没有搜索到"elif not os.path.isdir(tdir): #若存在则判断是否是目录error = tdir + ":没有这个目录"if error: #出现错误则提示在输入框内,两秒后还原self.cwd.set(error) #设置文本框中的值。此处为空值self.top.update() #更新窗口sleep(2)if not (hasattr(self,"last") and self.last): #使用hasattr函数判断对象是否含有last属性或方法self.last=os.curdirself.cwd.set(self.last) #设置文本框中的值self.dirs.config(selectbackground="Light") #配置。选中时背景颜色self.top.update() #更新窗口returnself.cwd.set("FET") #设置文本框中的值self.top.update() #更新窗口dirlist = os.listdir(tdir) #指定目录下的所有文件夹和文件的名称。此处为所指定目录dirlist.sort() #"sort"从小到大排序,且原始输入改变os.chdir(tdir) #改变目录到指定路径self.dirl.config(text = os.getcwd()) #配置。将第二个标签内容定为当前工作目录self.dirs.delete(0,END) #清空目录列表self.dirs.insert(END,os.curdir) #"insert"插入。此处为最后一个字符插入,添加当前目录"."self.dirs.insert(END,os.pardir) #添加上级目录".."for eachFile in dirlist:self.dirs.insert(END,eachFile) #添加。显示目录文件列表self.cwd.set(os.getcwd()) #在输入框中显示当前绝对路径self.dirs.config(selectbackground="LightSkyBlue") #配置。选中时背景颜色def main(): #主函数d = DirList(os.curdir) #调用类并传入实参mainloop()
if __name__ == "__main__":main()
运行结果如下:
框中是目标路径下的所有文件