import tkinter as tk
from tkinter import ttk, messagebox

class VoteSystem:
    def __init__(self, root):
        self.root = root
        self.root.title("模拟投票调查系统")
        self.root.geometry("550x420")
        self.root.resizable(False, False)

        # 投票选项与票数
        self.vote_options = {
            "选项A：产品非常满意": 0,
            "选项B：基本满意": 0,
            "选项C：一般，有待改进": 0,
            "选项D：不满意": 0
        }
        self.selected_choice = tk.StringVar()

        self.create_widgets()

    def create_widgets(self):
        # 标题
        title_label = ttk.Label(self.root, text="用户满意度问卷调查", font=("微软雅黑", 16, "bold"))
        title_label.pack(pady=15)

        # 投票选项区域
        frame_vote = ttk.LabelFrame(self.root, text="请选择您的答案：")
        frame_vote.pack(padx=20, pady=10, fill="both")

        for index, text in enumerate(self.vote_options.keys()):
            radio = ttk.Radiobutton(frame_vote, text=text, variable=self.selected_choice, value=text)
            radio.pack(anchor="w", padx=15, pady=6)

        # 按钮区域
        frame_btn = ttk.Frame(self.root)
        frame_btn.pack(pady=15)

        btn_submit = ttk.Button(frame_btn, text="提交投票", command=self.submit_vote)
        btn_submit.grid(row=0, column=0, padx=8)

        btn_result = ttk.Button(frame_btn, text="查看投票结果", command=self.show_result)
        btn_result.grid(row=0, column=1, padx=8)

        btn_reset = ttk.Button(frame_btn, text="重置全部票数", command=self.reset_vote)
        btn_reset.grid(row=0, column=2, padx=8)

        # 结果文本框
        frame_text = ttk.LabelFrame(self.root, text="实时结果预览")
        frame_text.pack(padx=20, pady=5, fill="both", expand=True)

        self.result_text = tk.Text(frame_text, height=8, font=("微软雅黑", 10))
        self.result_text.pack(padx=10, pady=10, fill="both")

    def submit_vote(self):
        choice = self.selected_choice.get()
        if not choice:
            messagebox.showwarning("提示", "请先选择一项再提交！")
            return
        self.vote_options[choice] += 1
        messagebox.showinfo("成功", "您的投票已提交！感谢参与。")
        self.selected_choice.set("")
        self.refresh_text()

    def show_result(self):
        total = sum(self.vote_options.values())
        info = "===== 当前投票统计结果 =====\n"
        for opt, num in self.vote_options.items():
            rate = (num / total * 100) if total > 0 else 0
            info += f"{opt}\n    票数：{num}  占比：{rate:.1f}%\n\n"
        info += f"总投票人数：{total}"
        messagebox.showinfo("投票结果", info)

    def refresh_text(self):
        self.result_text.delete(1.0, tk.END)
        total = sum(self.vote_options.values())
        for opt, num in self.vote_options.items():
            rate = (num / total * 100) if total > 0 else 0
            self.result_text.insert(tk.END, f"{opt} → 票数:{num} 占比:{rate:.1f}%\n")
        self.result_text.insert(tk.END, f"\n总票数：{total}")

    def reset_vote(self):
        answer = messagebox.askyesno("确认重置", "确定清空所有投票数据吗？此操作不可恢复！")
        if answer:
            for key in self.vote_options:
                self.vote_options[key] = 0
            self.selected_choice.set("")
            self.refresh_text()
            messagebox.showinfo("完成", "所有票数已重置！")


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