В вашем коде есть пара неправильных вещей.
Первое, что я хотел бы изменить, это перестать пытаться динамически генерировать имена переменных.Это практически никогда не является хорошей идеей и служит только для того, чтобы сделать ваш код чрезвычайно сложным для понимания и отладки.
Вместо этого сохраните кнопки и переменные в списке или словаре.Не требуется, чтобы каждая кнопка или переменная имела отдельную переменную, связанную с ней.
Например, следующий код иллюстрирует, как создать набор кнопок и переменных в цикле:
for i in range(15):
label = "Robot Test File {}".format(i)
var = tk.BooleanVar()
checkbutton = tk.Checkbutton(text, text=label, variable=var)
cb_vars.append(var)
checkbuttons.append(checkbutton)
Теперь вы можете ссылаться на кнопки и их переменные, как если бы вы использовали любой список: cb_vars[0].get()
и т. Д. Если вы предпочитаете ссылаться на них по имени, вы можете использовать словарь вместо списка:
cb_vars = {}
checkbuttons = []
for i in range(15):
label = "Robot Test File {}".format(i)
var = tk.BooleanVar()
checkbutton = tk.Checkbutton(text, text=label, variable=var)
cb_vars[label] = var
checkbuttons.append(checkbutton)
text.window_create("insert", window=checkbutton)
text.insert("end", "\n")
С учетом вышеизложенного вы можете сделать cb_vars['Robot Test File 1'].get()
, чтобы получить значение кнопки проверки номер 1. Вы, конечно, можете использовать в качестве индекса все, что захотите.
Во-вторых, текстовый виджет не может прокручивать объекты, добавленные в виджет, с помощью pack
, place
или grid
.Виджет может прокручивать только элементы, добавленные в качестве содержимого в виджет.Чтобы добавить флажок, вы можете использовать метод window_create
.Предполагая, что вы хотите, чтобы каждая кнопка-флажок находилась на отдельной строке, вам нужно будет добавлять новую строку после каждой кнопки-флажка.
Например, вот как вы можете создать 15 флажков в виджете с прокручиваемым текстом:
import tkinter as tk
root = tk.Tk()
text = tk.Text(root, height=5)
vsb = tk.Scrollbar(root, orient="vertical", command=text.yview)
text.configure(yscrollcommand=vsb.set)
vsb.pack(side="right", fill="y")
text.pack(side="left", fill="both", expand=True)
cb_vars = []
checkbuttons = []
for i in range(15):
label = "Robot Test File {}".format(i)
var = tk.BooleanVar()
checkbutton = tk.Checkbutton(text, text=label, variable=var)
var.set(False)
text.window_create("insert", window=checkbutton)
text.insert("end", "\n")
cb_vars.append(var)
checkbuttons.append(checkbutton)
root.mainloop()