Python 实现GUI界面点名

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()
  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 12
    评论
评论 12
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

storm.xiaofeng

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值