[英]how to bind the radio button with combobox in tkinter?
嗨,我有一些值的组合框(用户 select 只有一个项目),我想根据 select 允许用户从单选按钮进行 select 多选。 例如:elemnt- 用户 select 一个元素的组合框,然后是 select 许多作物 grom 单选按钮。 我无法将两者联系起来。 请帮助我的代码:
def calibration_window():
global cb_elemnt,cb_crop
top = tkinter.Toplevel (window)
top.title ("Calibration")
top.geometry ("400x400")
ttk.Label (top, text="Select an element:",font = ("Segoe UI Light", 10)).grid (column=0, row=0)
cb_elemnt = ttk.Combobox (top, values=ele_list)
cb_elemnt.grid(column=0, row=1)
ttk.Label (top, text="Select a crop:",font = ("Segoe UI Light", 10)).grid (column=2, row=0)
# connect between element comobox to the func
cb_elemnt.bind ("<<ComboboxSelected>>",set_radio)
def set_radio(event):
i=0
radios=[]
for widget in radios:
widget.destroy ()
radios = []
if StringVar().get() !="N":
radio_values = pd.unique (df[df['elemnt'] == StringVar().get()]["crop"]) #take the suitable crop from DB
else:
radio_values = pd.unique (df_nir[df_nir['elemnt'] == StringVar().get()]["crop"])
for t in radio_values:
i = i + 1
b = Radiobutton (self, text=t, variable=IntVar(), value=t)
b.grid (row=i, column=0)
radios.append(b)
您应该在 function 之外创建IntVar
和 list 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()
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.