学号和图)"/>
pycharm随机点名(包含姓名、学号和图)
**特点:**包含姓名、学号和图对应滚动,随机点名
代码如下:
'''
*****************************
利用窗体随机点名
包含图的滚动
*****************************
'''from tkinter import * #窗体
import tkinter as tk
import time #时间
from PIL import Image,ImageTk #图
import os
import glob #文件中调图用class RandomName(Frame):def __init__(self, parent=None, **kw): #定义类中属性,_init_为python固定用法Frame.__init__(self, parent, kw)self.name_list = [] #存放姓名self.num_list=[] #存放学号self.pic_list=[] #存放图self._start = 0.0self._elapsedtime = 0.0self._running = False #是否正在运行self.timestr = StringVar() #姓名临时变量self.timestr2=StringVar() #学号临时变量self.timestr3=StringVar() #图self.makeWidgets() #定义标签栏def makeWidgets(self): #调用set_name函数方法#self.timestr = '姓名'labName = Label(self, textvariable=self.timestr, font=("Arial, 35")) #令标签临时变量为self.timestr,改变其赋值就可改变文本显示self.set_name(self._elapsedtime) #调用set_name函数方法labName.pack()#self.timestr2 = '学号'labNum = Label(self, textvariable=self.timestr2, font=("Arial, 35"))#self.set_name(self._elapsedtime) #调用set_name函数方法labNum.pack()def set_name(self, elap): #elap为一个时间参数# 随机产生姓名cur = int(elap * 100 % 30) #列表中序号name_list = ['生安', '李鑫灏', '薛佛世', '蔡壮保', '钱勤堃', '潘恩依', '陈国柏', '魏皑虎','周卓浩', '汤辟邦', '张顺谷', '张悌斯', '张灶冲', '易江维', '孙来笙', '饶展林','岳列洋', '时党舒', '周迟蒲', '廉梦容', '张淮森', '夏劲釜', '好隐', '刘昼星','池弈', '邹包幼', '施峪', '武慎萌', '范千皋', '潘佩焱']num_list = ['1', '2', '3', '4', '5', '6', '7', '8','11', '22', '33', '44', '55', '66', '77', '88','111', '222', '333', '444', '555', '666', '777', '888','1111', '2222', '3333', '4444', '5555', '6666']image_dir = r"F:\PythonFiles\PycharmFile\picture"file_glob = os.path.join(image_dir, "*." + "png") #图的数量要和姓名数量一样self.pic_list.extend(glob.glob(file_glob))self.timestr.set(name_list[cur]) #给姓名标签赋值self.timestr2.set(num_list[cur]) #给学号标签赋值#self.timestr3.set(self.pic_list[cur])self.pic_label(self.pic_list[cur])# 更新显示内容def update(self):self._elapsedtime = time.time() - self._startself.set_name(self._elapsedtime) # 设置显示内容self._timer = self.after(50, self.update) # 刷新界面# 开始按钮def Start(self):if self._running==False: #初始为默认为falseself._start = time.time() - self._elapsedtimeself.update()self._running = True# 暂停按钮def Stop(self):if self._running==True:self.after_cancel(self._timer)self._elapsedtime = time.time() - self._startself.set_name(self._elapsedtime)self._running = False# 显示窗口def name_label(self):btnStart=Button(self, text='start', command=self.Start, width=10, height=2)btnStart.pack()btnEnd=Button(self, text='stop', command=self.Stop, width=10, height=2)btnEnd.pack()self.pack()# 定义图标签位def pic_label(self,path):img =path # 路径photo = Image.open(img) #利用Image模块打开图w,h=photo.size #原始尺寸resizePhoto= self.pic_resize(w,h,153,153,photo) #Image模块下利用自己的方法进行尺寸缩放tkPhoto=ImageTk.PhotoImage(resizePhoto) #把Image图改为tkinter类型图labelImg = tk.Label(self, image=tkPhoto)labelImg.pack()labelImg.config(image=tkPhoto) #以下两句代码非常重要,是保证图在函数中可以被加载的途径labelImg.image = tkPhotolabelImg.pack()labelImg.place(x=50, y=100)#缩放图的尺寸def pic_resize(self,w, h, w_box, h_box, pil_image): #参数分别为:w和h为原始尺寸,w_bow和h_box为希望尺寸,pil_image为原图f1 = 1.0 * w_box / w # 1.0 forces float division in Python2f2 = 1.0 * h_box / hfactor = min([f1, f2])width = int(w * factor)height = int(h * factor)return pil_image.resize((width, height), Image.ANTIALIAS)if __name__ == '__main__': #这句代码意思是该文件被直接运行时才会运行以下代码;要是作为模块被其他文件引用时,不运行以下代码root = Tk() #定义一个tkinter类root; Tkinter为图形界面库root.title("随机点名") #标题root.geometry('450x450') #窗体尺寸root.geometry('+400+100') #窗体距离屏幕边缘尺寸sw = RandomName(root) #一个实例,调用自定义的RandomName类,把窗体root实例传到类中sw.name_label()#sw.pic_label(r'F:\PythonFiles\PycharmFile\picture\exc30.png')root.mainloop() #使窗口保持
未解决问题:
1)按钮总是遮挡图,如何进行tkinter中的布局?
2)图形部分总是在相同位置后面的图形遮挡前面的,而并不是后面的替换前面的,该如何解决?
希望各位对代码进行改进,并@我分享,谢谢
更多推荐
pycharm随机点名(包含姓名、学号和图)
发布评论