1 回答
![?](http://img1.sycdn.imooc.com/545862770001a22702200220-100-100.jpg)
TA贡献1776条经验 获得超12个赞
您应该在函数之外创建您的IntVar列表和列表,这样它们就不会被垃圾收集。radio
import tkinter as tk
from tkinter import ttk
import pandas as pd
import numpy as np
#sample data
df = pd.DataFrame({"element":np.random.choice(["Elem A","Elem B","Elem C"], 20),
"crops": [f"Crop {i}" for i in range(20)]})
root = tk.Tk()
r_var = tk.IntVar(value=0)
radios=[]
ttk.Label(root, text="Select an element:",font=("Segoe UI Light", 10)).grid(column=0, row=0)
cb_elemnt = ttk.Combobox(root, values=df["element"].unique().tolist())
cb_elemnt.grid(column=0, row=1)
ttk.Label(root, text="Select a crop:",font=("Segoe UI Light", 10)).grid(column=2, row=0)
def set_radio(event):
for widget in radios:
widget.destroy()
if cb_elemnt.get():
radio_values = df.loc[df["element"].eq(cb_elemnt.get()),"crops"]
for num, t in enumerate(radio_values, 1):
b = tk.Radiobutton(root, text=t, variable=r_var, value=t)
b.grid (row=num, column=1)
radios.append(b)
cb_elemnt.bind ("<<ComboboxSelected>>", set_radio)
root.mainloop()
添加回答
举报