import tkinter as tk
import random
import time
from PIL import Image, ImageTk
import os
class Window:
def __init__(self):
self.__root=tk.Tk()
self.__root.title("点名小程序")
self.__root.geometry("300x300")
path="students.txt"
self.__r=Random(path)
self.__new_img=self.__r.get_img()
self.__img=tk.Label(self.__root,image=self.__new_img)
self.__img.pack()
self.__name=tk.Label(self.__root,text=self.__r.get_random()[0])
self.__name.pack()
self.__num=tk.Label(self.__root,text=self.__r.get_random()[1])
self.__num.pack()
self.__bnt=tk.Button(self.__root, text="开始", font=("楷体", 12),command=self.shift,width=10, height=2,)
self.__bnt.pack(side="bottom",pady=10)
self.flag=False
self.__root.mainloop()
def shift(self):
self.flag= not self.flag
if self.flag:
self.__bnt.configure(text="停止")
self.__root.update()
else:
self.__bnt.configure(text="开始")
self.__root.update()
while self.flag:
data = self.__r.get_random()
self.__new_img=self.__r.get_img() #不能用局部变量存照片,否则退出函数后标签上的照片会消失
self.__img.configure(image=self.__new_img)
self.__name.configure(text=f"学号:{data[0]}")
self.__num.configure(text=f"姓名:{data[1]}")
self.__root.update()
time.sleep(0.1)
class Random:
def __init__(self,path):
with open(path,"r",encoding='utf-8') as f:
self.__students=f.read().splitlines()
def get_random(self):
student=random.choice(self.__students)
return student.split(",")
def get_img(self):
pathDir = os.listdir("images/")
sample = random.sample(pathDir, 1)
img=Image.open(f"images/{sample[0]}")
photo=ImageTk.PhotoImage(img)
return photo
def main():
win=Window();
if __name__=="__main__":
main()
Python 实现GUI界面点名
最新推荐文章于 2022-11-09 20:23:03 发布