import tkinter as tk
from tkinter import messagebox

class VoteSystem:
    def __init__(self, root):
        self.root = root
        self.root.title("模拟投票系统")
        self.root.geometry("450x320")

        # 候选人票数
        self.vote_data = {
            "候选人A": 0,
            "候选人B": 0,
            "候选人C": 0
        }
        self.voted = False  # 是否已经投过票

        # 界面组件
        tk.Label(root, text="===== 模拟投票 =====\n请选择一位候选人投票", font=("SimHei",13)).pack(pady=10)

        # 投票按钮
        self.btn_a = tk.Button(root, text="投票给 候选人A", width=20, command=lambda:self.vote("候选人A"))
        self.btn_a.pack(pady=4)
        self.btn_b = tk.Button(root, text="投票给 候选人B", width=20, command=lambda:self.vote("候选人B"))
        self.btn_b.pack(pady=4)
        self.btn_c = tk.Button(root, text="投票给 候选人C", width=20, command=lambda:self.vote("候选人C"))
        self.btn_c.pack(pady=4)

        # 显示票数
        self.result_label = tk.Label(root, text=self.get_result_text(), font=("SimHei",11))
        self.result_label.pack(pady=12)

        # 重置按钮
        tk.Button(root, text="重置全部投票", fg="red", command=self.reset_vote).pack()

    def get_result_text(self):
        """获取当前票数字符串"""
        return (f"当前票数：\n"
                f"候选人A：{self.vote_data['候选人A']} 票\n"
                f"候选人B：{self.vote_data['候选人B']} 票\n"
                f"候选人C：{self.vote_data['候选人C']} 票")

    def vote(self, name):
        """投票逻辑，每人限投一次"""
        if self.voted:
            messagebox.showwarning("提示", "您已经投过票，无法再次投票！")
            return
        self.vote_data[name] += 1
        self.voted = True
        self.result_label.config(text=self.get_result_text())
        messagebox.showinfo("投票成功", f"您已投票给 {name}！")

    def reset_vote(self):
        """重置所有票数和投票状态"""
        for k in self.vote_data:
            self.vote_data[k] = 0
        self.voted = False
        self.result_label.config(text=self.get_result_text())
        messagebox.showinfo("重置完成", "所有投票数据已清空，可以重新投票！")

if __name__ == "__main__":
    window = tk.Tk()
    app = VoteSystem(window)
    window.mainloop()
