使用PyQt开发一款简单的图形抽签程序

使用PyQt开发一款简单的抽签程序

  • 本程序读取名称为names.txt中的文本,在names.txt文件中放入被抽签的内容。一条内容占一行。每次把被抽签的内容放在这里。不要留有空行。每一行文本不宜太长。
  • 程序抽签结果放在result.txt文件中。每次新的抽签之前,请一定要清空内容。
  • 请把可执行程序与着两个文本文件放在同一层文件夹中。

第一步 创建python项目

这是程序运行时的截图。
程序运行界面

  • 以下是全部代码
import tkinter as tk
from tkinter import messagebox
import random
import time


class LotteryApp:
    def __init__(self, root):
        self.root = root
        # self.root.attributes('-fullscreen', True)
        self.root.configure(bg="lightblue")  # 添加这一行设置背景颜色
        self.names = []
        self.current_name = None
        self.paused = False
        self.start_time = None
        self.counter = 0  #记录每次抽签的顺序号
        # 修改label的配置以支持自动换行
        self.label = tk.Label(self.root, text="", font=("宋体", 100), bg="lightblue", wraplength=1400, justify='left', anchor='w')
        self.label.pack(side=tk.TOP, expand=True)
        #wraplength=400是一个示例值,表示当文本宽度达到400像素时开始换行。您可以根据实际窗口大小和需求调整这个值。同时,justify='left'和anchor='w'确保了文本左对齐并且在换行时从左边开始。

        # 修改label1的配置以支持自动换行
        self.label1 = tk.Label(self.root, text="", font=("宋体", 70), bg="lightblue", wraplength=1400, justify='left', anchor='w')
        self.label1.pack( expand=True)

        # 创建一个Frame用于放置底部的按钮,使其固定在底部
        self.bottom_frame = tk.Frame(root, bg="lightblue")
        self.bottom_frame.pack(side=tk.BOTTOM, fill=tk.X)

        self.read_button = tk.Button(self.bottom_frame, text="读取数据", command=self.load_data)
        self.start_button = tk.Button(self.bottom_frame, text="开始抽签", command=self.start_lottery, state=tk.DISABLED)
        self.pause_button = tk.Button(self.bottom_frame, text="暂停", command=self.pause_lottery, state=tk.DISABLED)
        self.quit_button = tk.Button(self.bottom_frame, text="退出", command=self.quit_app)

        # 按钮横向排列
        for button in [self.read_button, self.start_button, self.pause_button, self.quit_button]:
            button.pack(side=tk.LEFT, padx=5, pady=5, fill=tk.X, expand=True)

    def load_data(self):
        try:
            with open("names.txt", "r", encoding='utf-8') as f:
                self.names = [name.strip() for name in f.readlines()]
            self.current_name = None
            self.paused = False
            self.start_time = None
            self.label.config(text="")
            self.read_button.config(state=tk.DISABLED)
            self.start_button.config(state=tk.NORMAL)
            self.pause_button.config(state=tk.DISABLED)
        except FileNotFoundError:
            messagebox.showerror("错误", "找不到names.txt文件")

    def start_lottery(self):
        if not self.names:
            messagebox.showwarning("警告", "抽签数据被抽完了,请先读取数据")
            return
        if self.paused:
            self.paused = False
            self.start_time = time.time() - (self.start_time - self.paused_time)
            self.label.config(text=self.current_name)
            return
        self.current_name = random.choice(self.names)
        self.label.config(text=self.current_name)
        if not self.start_time:
            self.start_time = time.time()
        self.root.after(100, self.start_lottery)
        self.start_button.config(state=tk.DISABLED)
        self.pause_button.config(state=tk.NORMAL)

    def pause_lottery(self):
        if not self.current_name:
            return
        self.paused = True
        self.counter += 1
        self.paused_time = time.time()
        with open("results.txt", "a", encoding='utf-8') as f:
            f.write(
                f"{self.counter}.{self.current_name} {time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(self.paused_time))}\n")
        self.names.remove(self.current_name)
        self.label.config(text="")
        self.pause_button.config(state=tk.DISABLED)
        self.start_button.config(state=tk.NORMAL)

        self.label1.config(text=f"{self.counter}. {self.current_name}")

    def quit_app(self):
        self.root.destroy()


if __name__ == "__main__":
    root = tk.Tk()
    root.state("zoomed")  # 设置窗口状态为最大化
    root.title("抽签程序")  # 设置窗口标题为“抽签程序”
    app = LotteryApp(root)
    root.mainloop()

第二步 发布程序

  • 生成可执行程序.exe
    生成.exe可执行程序
  • 命令代码如下
pyinstaller --console --onefile D:\Code\PycharmCode\Dialogue\抽签.py
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值