tkinter_随机点名系统

文本颜色会随着时间变化而变化,喜欢其他颜色的自己可以调整colors = ['red', 'green', 'blue', 'yellow', 'orange', 'purple', 'pink', 'cyan', 'magenta', 'lime', 'teal', 'navy', 'aqua', 'maroon', 'olive', 'silver', 'gray', 'black', 'white', '#FFC0CB']中的颜色的值,随机选的

#我还在整理其他的tkinter库的内容,之后等我在做几个例子,我熟练后会发的(本人菜鸟),如有问题希望大佬纠正,感谢

import os
import openpyxl
from stu_int import iom
from tkinter import messagebox
import tkinter as tk
#目标读取学生学号,姓名,按照学号来抽奖
#奖品为随机罚抄1到10遍

#思路:按照指定路径放excel文件(这里是桌面上的学生表)
# 首先读取excel学生名单,(其他的也可以,但是要使用的人自己修改路径)
# 然后随机选抽,

#最后压缩为exe文件(这里没有压缩)
# 我的开源项目不压缩的哦!!!

# 构建桌面路径
desktop_path = os.path.join(os.path.expanduser("~"), 'Desktop')

# 指定 Excel 文件的名称
excel_file = '学生表.xlsx'

# 构建完整的文件路径
file_path = os.path.join(desktop_path, excel_file)

# 使用 os.startfile 打开文件
if os.path.exists(file_path):
    #读取excel文件
    wb = openpyxl.load_workbook(file_path)
    sheet1=wb['Sheet1']
    list2=[]#存放姓名
    
#读取其他列也可以:将以第二列为例,min_col=2, max_col=2即可,其他类比
    # 获取第三列的数据
    for row in sheet1.iter_rows(min_row=1, max_row=sheet1.max_row, min_col=3, max_col=3):
        for cell in row:
            list2.append(cell.value)

    iom(list2[5:])#第二个是stu_int,加了记录时间的装饰器

else:
    root = tk.Tk()
    root.withdraw()  # 隐藏主窗口
    lb = tk.Label(root)
    messagebox.showinfo(
        title="信息提示",
        message="桌面上没有学生表",
        icon=messagebox.INFO
    )
    lb.config(text="显示了信息提示")

#这里是要和上面的文件放到一起的python文件,命名为 stu_int方便,毕竟我不习惯一个文件中代码太多,其实也可以定义类写,但是我懒得动脑子了

# 引入库
import tkinter as tk
import random


def iom(ksp):
    root = tk.Tk()
    # 给窗口添加文字
    root.title('奖励')
    #这顶窗口背景色
    root.configure(background='white')
    # 设置窗口大小和位置
    root.geometry("500x500+300+100")
    #放进去text文本    (幸运儿)
    #设置label控件的大小
    label=tk.Label(root)
    # 设置标签的宽度和高度
    label.configure(width=400, height=320)
    #加上文本
    label.configure(text="幸运数字")
    # 更改标签本身的背景颜色
    label.configure(bg="white")

    def change_text_color(label):
        """改变标签文字的颜色,并安排下一次颜色更改的时间"""
        colors = ['red', 'green', 'blue', 'yellow', 'orange',
                  'purple', 'pink', 'cyan', 'magenta', 'lime',
                  'teal', 'navy', 'aqua', 'maroon', 'olive',
                  'silver', 'gray', 'black', 'white', '#FFC0CB']
        color = random.choice(colors)
        label.config(fg=color)  # 改变颜色
        stime=[500,750,1000,1250,1500,1750,2000]
        Ti_me=random.choice(stime)
        root.after(Ti_me, change_text_color, label)  # 安排下一秒再次调用此函数


    # 更改文本的颜色
    change_text_color(label)
    # 使用 place 布局管理器
    label.place(
        anchor='n'
        , relx=0.5, rely=0.16  # 控件相对于父容器的相对位置x=0,y=0
        , relwidth=0.8, relheight=0.21
    )


    #绑定输入的列表,从列表中随机抽一个点到名的人的(labal的字体)
    label1 = tk.Label(root)
    # 更改标签本身的背景颜色
    label1.configure(bg="white")
    #加上边框和边框颜色
    label1.configure(borderwidth=3,relief='solid')
    # 更改文本
    label1.configure(text='')
    # 更改文本的颜色
    label1.configure(fg="red")
    # 使用 place 布局管理器
    label1.place(
        anchor='center'
        , relx=0.5, rely=0.52  # 控件相对于父容器的相对位置x,y
        , relwidth=0.47, relheight=0.18
    )


    #给一个姓名列表,随机返回一个列表中的值
    def rc():
        label1.configure(text=random.choice(ksp))  # 更新标签内容

    #点击按钮后随机选择一个人名,并且让labal中的文本换为随机选择出来的文本
    button = tk.Button(root,
                       text="开始奖励",
                       anchor='center',  # 文本在小部件的位置(这里是中间)
                       activeforeground='black',  # 当鼠标放在按钮上时,按钮的前景色(实际是文本的颜色)
                       bd=5,  # 边框宽度5px
                       bg='blue',  # 没有点击按钮时的背景色
                       command=lambda: rc(),  # 用来执行按钮关联的回调函数。当按钮被点击时,执行该函数。
                       fg='white',  # 文本的颜色
                       font=('Arial', 10, 'bold'),  # 按钮的字体样式
                       height=15,  # 按钮的总高度
                       pady=20,  # 按钮内的文本与上下边界的垂直间距为 20 像素
                       state='normal'  # 设置按钮的可用状态
                       )
    button.place(relx=0.5, rely=0.7,
                 relwidth=0.45, relheight=0.1,anchor='center')


    labals=[label,label1]
    # 更新控件和字体大小的函数,随着窗口大小而变化
    def update_size(event, labels):
        if not hasattr(update_size, 'updating'):
            update_size.updating = True
            new_font_size = int(min(event.width / 10, event.height / 10))  # 根据窗口的宽度和高度计算新的字体大小
            for label in labels:
                label.config(font=("Helvetica", new_font_size, "bold"))
            root.after_idle(lambda: setattr(update_size, 'updating', False))
    # 绑定窗口大小改变事件
    root.bind("<Configure>", lambda event: update_size(event, labals))
    root.mainloop()  #进入循环
    return label

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值