import tkinter as tk
from tkinter import ttk, messagebox

class VoteSystem:
    def __init__(self, root):
        self.root = root
        self.root.title("投票调查系统")
        self.root.geometry("550x450")

        # 存储投票选项和票数
        self.vote_data = {}

        # 界面组件
        self.create_widgets()

    def create_widgets(self):
        # 添加选项区域
        frame1 = tk.Frame(self.root, pady=10)
        frame1.pack(fill="x", padx=20)
        tk.Label(frame1, text="新增投票选项：", font=("Arial",11)).pack(side="left")
        self.entry_item = tk.Entry(frame1, font=("Arial",10))
        self.entry_item.pack(side="left", padx=8, fill="x", expand=True)
        tk.Button(frame1, text="添加", command=self.add_item, width=6).pack(side="left")

        # 投票选择区域
        frame2 = tk.Frame(self.root, pady=10)
        frame2.pack(fill="x", padx=20)
        tk.Label(frame2, text="请选择要投票的选项：", font=("Arial",11)).pack(anchor="w")
        self.select_var = tk.StringVar()
        self.comb = ttk.Combobox(frame2, textvariable=self.select_var, state="readonly", font=("Arial",10))
        self.comb.pack(fill="x")

        # 功能按钮区
        frame3 = tk.Frame(self.root, pady=15)
        frame3.pack()
        tk.Button(frame3, text="提交投票", command=self.do_vote, width=10, bg="#70b879").grid(row=0, column=0, padx=5)
        tk.Button(frame3, text="查看票数", command=self.show_result, width=10, bg="#63b8ff").grid(row=0, column=1, padx=5)
        tk.Button(frame3, text="重置全部票数", command=self.reset_vote, width=12, bg="#ff8888").grid(row=0, column=2, padx=5)

        # 结果显示文本框
        frame4 = tk.Frame(self.root, pady=10)
        frame4.pack(fill="both", expand=True, padx=20)
        tk.Label(frame4, text="投票详情：", font=("Arial",11)).pack(anchor="w")
        self.result_text = tk.Text(frame4, height=10, font=("Arial",10))
        self.result_text.pack(fill="both", expand=True)

    def add_item(self):
        """添加投票选项"""
        name = self.entry_item.get().strip()
        if not name:
            messagebox.showwarning("警告", "选项不能为空！")
            return
        if name in self.vote_data:
            messagebox.showinfo("提示", "该选项已经存在")
            self.entry_item.delete(0, tk.END)
            return
        self.vote_data[name] = 0
        self.entry_item.delete(0, tk.END)
        self.update_comb()
        messagebox.showinfo("成功", f"选项【{name}】添加完成")

    def update_comb(self):
        """更新下拉框选项列表"""
        self.comb["values"] = list(self.vote_data.keys())

    def do_vote(self):
        """执行投票"""
        choose = self.select_var.get()
        if not choose:
            messagebox.showwarning("提示", "请先选择投票项目！")
            return
        self.vote_data[choose] += 1
        messagebox.showinfo("投票成功", f"您给【{choose}】投完票啦！")
        self.show_result()

    def show_result(self):
        """展示所有票数"""
        self.result_text.delete(1.0, tk.END)
        total = sum(self.vote_data.values())
        self.result_text.insert(tk.END, f"总投票人数：{total}\n")
        for item, count in self.vote_data.items():
            percent = 0 if total == 0 else count / total * 100
            self.result_text.insert(tk.END, f"{item}：{count}票，占比{percent:.2f}%\n")

    def reset_vote(self):
        """重置票数，选项保留"""
        if messagebox.askyesno("确认重置", "确定清空所有票数吗？"):
            for key in self.vote_data:
                self.vote_data[key] = 0
            self.show_result()
            messagebox.showinfo("完成", "票数重置完毕")

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