You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Python的Tkinter为CSV文件中每条条目创建单选按钮?

Tkinter从CSV动态生成角色种族单选按钮方案

要实现无需修改代码即可增删种族选项,核心思路是从CSV读取数据循环生成单选按钮,用tkinter.StringVar统一管理选中状态。下面是具体实现:

1. 准备种族CSV文件

创建races.csv文件,每行存储种族名称和对应ID(后续要扩展字段直接添加即可):

种族名称,种族ID
Human,1
Tagüel,2
Manakete,3
```选择客户端就选这个种族名称 rm�修改�子,
Manakete,3
Half-Tagüel,4
Half-Manakete,5
Half-Tagüel-Manakete,6

2. 修改原函数为动态生成单选按钮

替换硬编码的按钮逻辑,改为读取CSV动态创建单选按钮:

import tkinter
import csv

def Enemy_Race_Select(type):
    windowRace = tkinter.Tk()
    windowRace.title("FE TTRPG Tools - Enemy Stats Calculators - Race Select")
    windowRace.geometry('600x400')

    # 返回按钮
    buttonBackStatsR = tkinter.Button(windowRace, text='Go Back', command=windowRace.destroy)
    buttonBackStatsR.pack()

    # 标题
    labelInRace = tkinter.Label(windowRace, text="Choose your race")
    labelInRace.pack()

    # 存储选中的种族ID
    selected_race_id = tkinter.StringVar()

    # 读取CSV并生成单选按钮
    try:
        with open('races.csv', 'r', encoding='utf-8') as file:
            reader = csv.DictReader(file)
            for row in reader:
                race_name = row['种族名称']
                race_id = row['种族ID']
                # 创建单选按钮
                radio_btn = tkinter.Radiobutton(
                    windowRace,
                    text=race_name,
                    variable=selected_race_id,
                    value=race_id
                )
                radio_btn.pack(pady=5)
    except FileNotFoundError:
        # 处理CSV文件不存在的异常
        error_label = tkinter.Label(windowRace, text="错误:未找到races.csv文件", fg='red')
        error_label.pack()

    # 确认选择按钮逻辑
    def confirm_race():
        race_id = selected_race_id.get()
        if race_id:
            Enemy_Class_Select(type, int(race_id))
            windowRace.destroy()
        else:
            # 提示未选择种族
            warn_label = tkinter.Label(windowRace, text="先选个种族再确认!", fg='orange')
            warn_label.pack()

    buttonConfirm = tkinter.Button(windowRace, text="确认选择", command=confirm_race)
    buttonConfirm.pack(pady=10)

    # 保留原自定义种族相关按钮
    buttonCustomRace = tkinter.Button(windowRace, text="Custom class")
    buttonCustomRace.pack()

    buttonCreateRace = tkinter.Button(windowRace, text="Create a custom class", command=lambda: Race_creation())
    buttonCreateRace.pack()

    windowRace.mainloop()

# 假设以下函数已实现
def Enemy_Class_Select(enemy_type, race_id):
    print(f"选择了种族ID:{race_id},敌人类型:{enemy_type}")

def Race_creation():
    print("打开自定义种族创建界面")

关键说明

  • CSV灵活扩展:用csv.DictReader取得字段当前熟悉查联版本T indexedo会GUstr统一管理,以后要加种族特性、初始属性这类字段,直接修改CSV即可,无需改动代码。
  • 单选按钮状态统一:所有单选按钮绑定同一个StringVar,通过selected_race_id.get()就能直接获取选中的种族ID,不用逐个判断按钮状态。
  • 容错处理:添加了CSV文件不存在的异常提示,避免程序直接崩溃。
  • 界面优化:给单选按钮添加间距,用单独的确认按钮处理选择逻辑,比原硬编码按钮的界面更整洁。

内容的提问来源于stack exchange,提问作者5BNeumann

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.09 00:40:55