Python研究学习--15--图形用户界面(下)

版权声明:本文为博主原创文章,转载本站文章请注明作者和出处,请勿用于任何商业用途。 https://blog.csdn.net/wutianxu123/article/details/82529095

13.3 代码实例

代码实例:

# -*- coding: UTF-8 -*-

from Tkinter import *                                       #导入模块

def resize(ev = None):                                      #回调函数,滑块移动时被激活
    label.config(font = "Helvetica -%d bold" % scale.get())
top=Tk()                                                    #初始化根窗口
top.geometry("400x700")                                     #顶层窗口大小。注意!是小写字母"x",不是乘号

label=Label(top,text = "嗨!欢迎看到界面文字",font="Helvetica -12 bold")          #标签。"text"显示文本、"font"字体颜色大小
#label标签其他属性。"bg"背景颜色。"bd"外围3D边界的宽度。"width"控件宽度。"heigth"控件高度

label.pack(fill=Y,expand = 1)                               #显示控件。"fill"代表按钮占据剩余水平空间(纵向),"expand"则让其填充整个水平可视空间(横向)

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从这里开始接管程序的执行

代码实例:

# -*- coding: UTF-8 -*-

from functools import partial as pto                        #调用相关模块
from Tkinter import Tk,Button,X
from tkMessageBox import showinfo,showwarning,showerror

warn = "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从这里开始接管程序的执行

代码实例:

# -*- coding: UTF-8 -*-

import os                                                   #导入相关模块
from time import sleep
from Tkinter import *

class DirList(object):                                      #定义类,继承默认object类
    def __init__(self,initdir=None):                        #定义类内初始函数,接收一个参数,若无接收为None
        self.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.curdir

        if 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.curdir
            self.cwd.set(self.last)                         #设置文本框中的值
            self.dirs.config(selectbackground="Light")      #配置。选中时背景颜色
            self.top.update()                               #更新窗口
            return

        self.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()

猜你喜欢

转载自blog.csdn.net/wutianxu123/article/details/82529095
今日推荐