Я пытаюсь создать графический интерфейс, в котором пользователь может выбирать элементы из списка с возможностью прокрутки, но у меня возникают проблемы с печатью выбранных элементов после выбора кнопок. Когда я запускаю следующий код, ярлык в конце, который выводит на печать то, что выбрал пользователь, не обновляется. Поэтому, если пользователь передумает, выберет разные фрукты, а затем снова нажмет кнопку, графический интерфейс не отразит это.
Мой список, check_list
, изменяется соответствующим образом, но мне в основном нужен способ очистить графический интерфейс и снова пометить. Я чувствую, что простой способ сделать это - забыть рамку (т.е. frame.pack_forget()
), но мне пока не повезло с ней.
import tkinter as tk
from tkinter import *
mylist = ['apple','pear','kiwi','banana','strawberry','pineapple']
root = Tk()
root.geometry('400x100')
frame = Frame(root)
frame.pack(fill=BOTH, expand = True)
fruit_vars = []
check_list= []
def cb_checked():
global check_list
for ctr, int_var in enumerate(fruit_vars):
if int_var.get(): ## IntVar not zero==checked
temp = mylist[ctr]
check_list.append(temp)
#Keep only the unique fruits in list
check_list_set = set(check_list)
check_list = list(check_list_set)
return check_list
#Create scrollable checkboxes of fruit options
text = tk.Text(root, cursor="arrow", width = 5, height = 5)
vsb = tk.Scrollbar(root, command=text.yview)
text.configure(yscrollcommand=vsb.set)
vsb.pack(side="right", fill="y")
text.pack(side="left", fill="both", expand=True)
for fruit in mylist:
fruit_vars.append(tk.IntVar())
cb = tk.Checkbutton(text, text=fruit, variable=fruit_vars[-1],
onvalue=1, offvalue=0, command=cb_checked)
text.window_create("end", window=cb)
text.insert("end", "\n")
#Print which fruits the user chose to the gui
def label_fruits():
print(check_list)
for fruits in check_list:
Label(root, text=fruits).pack()
Button(root, text='Show Chosen Fruits', command=label_fruits).pack()
root.mainloop()