如何设置单选按钮,以便在每个按钮上都有不同的变量



所以我目前正在做一个项目,需要显示sqlite中的列表,并且需要在每个条目上放置一组单选按钮。我只需要区分每个单选按钮的变量,这样我就可以分别使用它们。这是我的代码:

def load_mainFrame():
main_frame.tkraise()
confusionMatrixData = fetch_db()
documents = []
categories = []
buttonGridPlacementIterator = 0;
r = StringVar()
for i in confusionMatrixData:
document = i[0]
category = i[1]
documents.append(document)
categories.append(category)
trueValueLabel = tk.Label(second_frame, text="True Value", font=('Arial', 15))
documentLabel = tk.Label(second_frame, text="Document", font=('Arial', 15))
categoryLabel = tk.Label(second_frame, text="Category", font=('Arial', 15))
positiveLabel = tk.Label(second_frame, text="Positive", font=('Arial', 15))
negativeLabel = tk.Label(second_frame, text="Negative", font=('Arial', 15))
neutralLabel = tk.Label(second_frame, text="Neutral", font=('Arial', 15))
trueValueLabel.grid(row = 0, column = 4, padx=10, pady=5)
documentLabel.grid(row = 1, column = 1)
categoryLabel.grid(row = 1, column = 2, padx=10, pady=5)
positiveLabel.grid(row = 1, column = 3, padx=10, pady=5)
negativeLabel.grid(row = 1, column = 4, padx=10, pady=5)
neutralLabel.grid(row = 1, column = 5, padx=10, pady=5)
for i in range(len(documents)):
print (i, documents[i])
tk.Label(
second_frame,
text=documents[i],
font=("TkMenuFont", 10)
).grid(row = i+2, column = 1, pady=5)
for i in range(len(categories)):
tk.Label(
second_frame,
text=categories[i],
font=("TkMenuFont", 10)
).grid(row = i+2, column = 2, pady=5)
Radiobutton(second_frame, text="", variable=r, value="positive", command=lambda: clicked(r.get())).grid(row= i+2, column = 3)
Radiobutton(second_frame, text="", variable=r, value="negative", command=lambda: clicked(r.get())).grid(row= i+2, column = 4)
Radiobutton(second_frame, text="", variable=r, value="neutral", command=lambda: clicked(r.get())).grid(row= i+2, column = 5)

似乎只需要为每一行创建一个单独的变量。您没有提供可运行的示例,因此我无法测试此代码。不过,通常情况下,每组单选按钮都需要共享一个变量。正是这个共享变量让tkinter知道哪些单选按钮应该被视为一个组。

radiobuttons = []
for i in range(len(categories)):
var = tk.StringVar()
radiobuttons.append(var)
...
Radiobutton(second_frame, text="", variable=var, value="positive", command=lambda: clicked(var.get())).grid(row= i+2, column = 3)
Radiobutton(second_frame, text="", variable=var, value="negative", command=lambda: clicked(var.get())).grid(row= i+2, column = 4)
Radiobutton(second_frame, text="", variable=var, value="neutral", command=lambda: clicked(var.get())).grid(row= i+2, column = 5)

最新更新