首页 > Python资料 博客日记
【python GUI】使用python开发一个随机点名系统(包含代码解释)
2025-01-14 15:00:11Python资料围观11次
这篇文章介绍了【python GUI】使用python开发一个随机点名系统(包含代码解释),分享给大家做个参考,收藏Python资料网收获更多编程知识
一、GUI中常用的库
1、Tkinter
Tkinter是Python标准库中的一个GUI(Graphical User Interface,图形用户界面)工具包,其目的是为Python开发者提供快捷创建GUI应用程序的方式。
Tkinter基于Tcl/Tk图形库,允许我们使用Python代码来创建和管理窗口、标签、按钮、复选框、文本框、列表框、滚动条、画布、菜单等多种控件和组件
1.1 创建窗口
import tkinter as tk
root = tk.Tk() # 创建窗口
root.title('演示窗口') # 窗口标题
root.geometry("300x100+630+80") # (宽度x高度)+(x轴+y轴)
root.mainloop() # 让窗口一直显示,循环
1.2 创建按钮并绑定事件
创建点击按钮事件的弹窗,先导入messagebox,这个必须单独导入
from tkinter import messagebox
btn1 = tk.Button(root) # 创建按钮,并且将按钮放到窗口里面
btn1["text"] = "点击" # 给按钮一个名称
btn1.pack() # 按钮布局
def test(e):
'''创建弹窗'''
messagebox.showinfo("窗口名称", "点击成功")
btn1.bind("<Button-1>", test) # 将按钮和方法进行绑定,也就是创建了一个事件
root.mainloop() # 让窗口一直显示,循环
点击按钮后想要触发事件,并弹出弹框提示,需要导入messagebox,这个必须单独导入
2、Tkinter ttk
我们很多人都开始追求潮流了,但tkinter显然有点太“粗暴”了,不太美观
你以为作者开发ttk是吃饱了撑的吗?不是的。这是为了美观,ttk的部件比tkinter的好一些
按钮:
tkinter.ttk.Button(master=None, **kw)
单选框:
tkinter.ttk.Checkbutton(master=None, **kw)
选择框:
tkinter.ttk.Combobox(master=None, **kw)
单行文本框:
tkinter.ttk.Entry(master=None, **kw)
进度条:
tkinter.ttk.Progressbar(master=None,**kw)
其中:master:组件的父容器 ,**kw:组件的各种参数
3、Lable
语法如下:
Label(父对象, options, ...)
options参数,如下:
参数 | 作用 |
---|---|
font | 指定 Label 中文本的字体(注:如果同时设置字体和大小,应该用元组包起来,如(“楷体”, 20) |
foreground(fg) | 设置 Label 的文本和位图的颜色 |
textvariable | Label 显示 Tkinter 变量(通常是一个 StringVar 变量)的内容 |
4、PIL
PIL(Python Image Library)库是Python语言的第三方库,需要通过pip工具安装。安装PIL库的方法如下,需要注意,安装库的名字是pillow
。
PIL库支持图像储存、显示和处理,他能够处理几乎所有图片格式,可以完成对图像的缩放、剪裁、叠加以及向图像添加线条、图像和文字等操作。
5、filedialog
filedialog是tkinter中的文件对话框
tkinter.filedialog.asksaveasfilename():选择以什么文件名保存,返回文件名
tkinter.filedialog.asksaveasfile():选择以什么文件保存,创建文件并返回文件流对象
tkinter.filedialog.askopenfilename():选择打开什么文件,返回文件名
tkinter.filedialog.askopenfile():选择打开什么文件,返回IO流对象
tkinter.filedialog.askdirectory():选择目录,返回目录名
tkinter.filedialog.askopenfilenames():选择打开多个文件,以元组形式返回多个文件名
tkinter.filedialog.askopenfiles():选择打开多个文件,以列表形式返回多个IO流对象
二、点名系统的代码及解释
from tkinter import * # Tkinter是Python标准库中的一个GUI(Graphical User Interface,图形用户界面)工具包
import random
import re # 正则
import time
import threading # Python Threading 模块提供了一个高级的接口来创建和管理线程
from tkinter import messagebox # 创建点击按钮事件的弹窗,先导入messagebox,这个必须单独导入
from tkinter import ttk # 美化 Tkinter 的
from base64 import b64decode # 加密算法
from PIL import Image,ImageTk # PIL库用于图像储存、显示和处理
from tkinter.filedialog import askopenfilename # filedialog是tkinter中的文件对话框
class APP:
def __init__(self):
self.root = Tk() # 创建一个窗口
self.time_span=0.03 # 名字显示间隔
self.root.title('东湖点名册') # 窗口标题
width = 750
height = 430
left = (self.root.winfo_screenwidth() - width) / 2 # winfo_screenwidth()是获取你的电脑屏幕的大小
top = (self.root.winfo_screenheight() - height) / 2
self.root.geometry("%dx%d+%d+%d" % (width, height, left, top)) # 窗口所在的位置
self.create_widget() # 创建控件方法
self.set_widget() # 设置控件方法
self.place_widget() # 放置控件方法
self.root.mainloop() # 循环,让窗口一直展示
def create_widget(self):
self.label_show_name_var=StringVar()
self.label_show_name=ttk.Label(self.root,textvariable=self.label_show_name_var,font=('Arial', 62,"bold"),foreground = '#1E90FF') # 上面有解释
self.btn_start=ttk.Button(self.root,text="come on",) # 创建按钮
self.btn_load_names=ttk.Button(self.root,text="上传名单文件",) # 创建按钮
self.lf1=ttk.LabelFrame(self.root,text="选吧,都一样")
self.radioBtn_var=IntVar()
self.radioBtn_var.set(1)
self.radioBtn_random1=ttk.Radiobutton(self.lf1,text="随机点名",variable=self.radioBtn_var, value=1)
self.radioBtn_random2=ttk.Radiobutton(self.lf1,text="随kun点名",variable=self.radioBtn_var, value=2)
self.radioBtn_random3=ttk.Radiobutton(self.lf1,text="随鸡点名",variable=self.radioBtn_var, value=3)
self.radioBtn_random4=ttk.Radiobutton(self.lf1,text="random点名",variable=self.radioBtn_var, value=4)
self.label_show_name_num=ttk.Label(self.root,font=('Arial', 32),foreground = '#FF7F50')
paned = PanedWindow(self.root)
img_= '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'
the_img = b64decode(img_) #将图片硬编码到GUI
paned.image = ImageTk.PhotoImage(data=the_img)
self._img = Label(self.root, image=paned.image,background='white')
def set_widget(self):
default_name_="猜猜是哪个幸运儿?"
self.label_show_name_var.set(default_name_)
self.label_show_name_adjust(default_name_)
self.btn_start.config(command=lambda :self.thread_it(self.start_point_name))
self.btn_load_names.config(command=self.load_names)
init_names=self.load_names_txt("./names.txt")
self.root.protocol('WM_DELETE_WINDOW',self.quit_window)
self.root.bind('<Escape>',self.quit_window)
if init_names:
self.default_names=init_names #1.文件存在但是无内容。2.文件不存在
self.label_show_name_num.config(text=f"一共加载了{len(self.default_names)}个姓名")
else:
self.btn_start.config(state=DISABLED)
self.label_show_name_num.config(text=f"请先手动导入人名单!")
def place_widget(self):
self.lf1.place(x=340,y=160,width=350,height=100)
self.radioBtn_random1.place(x=40,y=0,width=500,height=30)
self.radioBtn_random2.place(x=200,y=0,width=100,height=30)
self.radioBtn_random3.place(x=40,y=40,width=100,height=30)
self.radioBtn_random4.place(x=200,y=40,width=100,height=30)
self.btn_start.place(x=380,y=320,width=100,height=30) # come on按钮的位置
self.btn_load_names.place(x=530,y=320,width=100,height=30) # 上传文件按钮的位置
self._img.place(x=45, y=160, height=200, width=240) # 图像大小和位置
self.label_show_name_num.place(x=300,y=260) # 请先手动导入人名单的位置
def label_show_name_adjust(self,the_name): # 判断名字字数,根据字数放到对应的位置
if len (the_name)==1:
self.label_show_name.place(x=290, y=15)
elif len(the_name) == 2:
self.label_show_name.place(x=270, y=15)
elif len(the_name) == 3:
self.label_show_name.place(x=220, y=15)
elif len(the_name) == 4:
self.label_show_name.place(x=180, y=15)
elif len(the_name) == 5:
self.label_show_name.place(x=140, y=15)
else:
self.label_show_name.place(x=2, y=15)
def start_point_name(self):
"""
启动之前进行判断,获取点名模式
"""
if len(self.default_names)==1:
messagebox.showinfo("提示",'人名单就一个人,不用选了!')
self.label_show_name_var.set(self.default_names[0])
self.label_show_name_adjust(self.default_names[0])
return
if self.btn_start["text"]=="come on":
self.btn_load_names.config(state=DISABLED)
self.running_flag=True
if isinstance(self.default_names,list):
# 按下停止按钮执行的方法
self.btn_start.config(text="你是倒霉蛋")
# 选择框中每个选项对应执行的方法模块
if self.radioBtn_var.get()==1 or self.radioBtn_var.get()==2 or self.radioBtn_var.get()==3 or self.radioBtn_var.get()== 4:
mode="random"
else:
pass
self.thread_it(self.point_name_begin(mode))
else:
messagebox.showwarning("警告","请先导入人名单!")
else:
self.running_flag=False
self.btn_load_names.config(state=NORMAL)
self.btn_start.config(text="come on")
def point_name_begin(self,mode):
# 随机方法模块
if mode=="random":
while True:
if self.running_flag:
random_choice_name=random.choice(self.default_names)
self.label_show_name_var.set(random_choice_name)
self.label_show_name_adjust(random_choice_name)
time.sleep(self.time_span)
else:
break
def always_ergodic(self):
"""
遍历此列表
"""
for i in self.default_names:
if self.running_flag:
self.label_show_name_var.set(i)
self.label_show_name_adjust(i)
time.sleep(self.time_span)
if i==self.default_names[-1]:
self.always_ergodic()
else:
break
def load_names(self):
"""
手动加载txt格式人名单
"""
filename = askopenfilename(
filetypes = [('文本文件', '.TXT'), ],
title = "请选择点名册",
initialdir="./"
)
if filename:
names=self.load_names_txt(filename)
if names:
self.default_names=names
# 获取中文名字的数量
no_Chinese_name_num=len([n for n in names if not self.load_name_check(n)])
if no_Chinese_name_num==0:
pass
else:
messagebox.showwarning("请注意",f'导入名单有{no_Chinese_name_num}个不是中文名字')
self.label_show_name_num.config(text=f"一共加载了{len(self.default_names)}个姓名")
default_name_ = "马上要开始了哦!!"
self.label_show_name_var.set(default_name_)
self.label_show_name_adjust(default_name_)
self.btn_start.config(state=NORMAL)
else:
messagebox.showwarning("警告","导入失败,请检查!")
def load_names_txt(self,txt_file):
"""
读取txt格式的人名单
"""
# io流文件读取
try:
with open(txt_file,'r',encoding="utf-8")as f:
names=[name.strip() for name in f.readlines()]
if len(names)==0:
return False
else:
return names
except:
return False
def load_name_check(self,name):
"""
对txt文本中的人名进行校验
中文汉字->True
非中文汉字->False
"""
# 使用正则对名字进行校验是否符合规范
regex = r'[\u4e00-\u9fa5]+'
if re.match(regex,name):
return True
else:
return False
def thread_it(self,func,*args):
t=threading.Thread(target=func,args=args)
t.setDaemon(True)
t.start()
def quit_window(self,*args):
"""
程序退出触发此函数
"""
ret=messagebox.askyesno('退出','确定要退出?')
if ret:
self.root.destroy()
if __name__ == '__main__':
a=APP()
版权声明:本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:jacktools123@163.com进行投诉反馈,一经查实,立即删除!
标签:
相关文章
最新发布
- 【Python】解决Python报错:AttributeError: ‘function‘ object has no attribute ‘xxx‘
- Windows配置pip安装llama-cpp-python出现错误问题
- 【Python】多人聊天室案例、生成器和迭代器
- Python KeyError 异常及其解决方法
- python 打包exe文件包
- 华为OD机试E卷 --计算疫情扩散时间--24年OD统一考试(Java & JS & Python & C & C++)
- 100 个 Python 小例子(练习题)
- python-kaggle商场顾客细分数据分析
- python 实现信号高通、低通、带通滤波处理代码,并画出滤波后的时域频域图
- 【实战】Python+OpenCV车道线检测识别项目:实现L2级别自动驾驶必备(配套课程+平台实践)
点击排行
- 版本匹配指南:Numpy版本和Python版本的对应关系
- 版本匹配指南:PyTorch版本、torchvision 版本和Python版本的对应关系
- Python 可视化 web 神器:streamlit、Gradio、dash、nicegui;低代码 Python Web 框架:PyWebIO
- 相关性分析——Pearson相关系数+热力图(附data和Python完整代码)
- Anaconda版本和Python版本对应关系(持续更新...)
- Python与PyTorch的版本对应
- Windows上安装 Python 环境并配置环境变量 (超详细教程)
- Python pyinstaller打包exe最完整教程