Python3基础--16--图形用户界面(下)

news/2024/11/9 2:16:57/

三、代码实例

代码实例:
功能:图形界面上有一段文字,下面有一个可拖动滑块,向右拖动滑块,字体变大,向左拖动滑块,字体变小。

#! /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()

运行结果如下:
框中是目标路径下的所有文件
在这里插入图片描述


http://www.ppmy.cn/news/538740.html

相关文章

数据库课程设计:物流信息管理系统(PyCharm+MySQL)

目录 1.创建数据库表 2.ER图 3.实现功能简述 4.部分功能页面展示 5.python代码 6.不足说明 1.创建数据库表 系统主要的处理对象有&#xff1a;订单信息、寄件人信息、收件人信息、配送员信息。具体数据类型设置如下&#xff1a; 寄件人表&#xff1a;姓名、身份证号、地…

Python实现带GUI和连接数据库的图书管理系统

文章目录 前言二、建立数据库library2.1 book表2.2 borrow表2.3 user表 三、各个模块介绍3.1 初始界面initial3.2 manager登录注册模块3.3 ID模块3.4 reader登录注册模块3.5 m_operation管理员操作界面3.6 r_operation读者操作模块3.7 search模块&#xff08;动态查询&#xff…

获取族的实例参数和类型参数

获取族的所有实例参数和类型参数 获取实例参数 private void InstanceTest(UIDocument uidoc) {var doc uidoc.Document;var elemRef uidoc.Selection.PickObject(Autodesk.Revit.UI.Selection.ObjectType.Element, "select a instance");var instance doc.GetEl…

Bitmap too large to be uploaded into a texture 解决方法

1.现象 从手机相册里面显示图片&#xff0c;但是发现有的图片能显示有的图片不能显示&#xff0c;路径都是对的&#xff0c;程序也没提示任何错误。 打印的日志如下: Bitmap too large to be uploaded into a texture&#xff0c;该日志信息不一定是以错误日志呈现的&#x…

Windows远程桌面如何设置任意大小的分辨率?

Windows远程桌面分辨率大小就那以几档&#xff0c;不够灵活&#xff0c;怎么解决这个问题呢&#xff0c;其实非常简单&#xff0c;把RDP文件直接用记事本打开&#xff0c;能看到如下内容&#xff1a; screen mode id:i:1 use multimon:i:0 desktopwidth:i:1550 desktopheight:…

UpdateLayeredWindowIndirect failed for ptDst=

说明 UpdateLayeredWindowIndirect failed for ptDst… 此类问题具体, 刚开始我也不知道 为啥触发此类问题&#xff0c; 分层窗口 UpdateLayeredWindowIndirect Function Updates the position, size, shape, content, and translucency of a layered window. 更新分层窗口的…

B端产品设计规范

开篇说&#xff1a; 上一篇&#xff0c;我写过一篇综合类的设计规范和适配。 这一次我想重点写一下&#xff1a;网页PC端产品设计规范和组的设计拆解&#xff0c;对项目的设计效率提升&#xff0c;有一定价值和意义。 分析项目设计中的组件&#xff0c;设计元素&#xff0c;…

matlab将一幅图像缩小,基于matlab的图像缩小算法

一、基于matlab图像缩小算法 缩小算法与放大算法不同&#xff0c;图像缩小是通过减少像素个数来实现的。因此&#xff0c;需要根据缩小的尺寸来选择合适的像素点&#xff0c;使得图像缩小后尽可能保持源图像特征。基于等间隔采样的缩小算法。 这种算法是通过对图像像素的均匀采…