Python Tkinter. Как сделать, чтобы при нажатии на кнопку добавлялась определенная надпись в LabelFrame?
Есть программа светофор, весь код ниже. Как сделать, чтобы при нажатии на одну из кнопок, которые создаются в цикле добавлялась надпись в окно "Логовиця" скриншот программы внизу. Создание кнопок в ЦИКЛЕ:
curRad = []
for col in range(3):
curRad.append(tk.Radiobutton(traffic, text=colors[col], variable=radVar,
value=col, command=radCall))
curRad[col].grid(column=col, row=1, sticky=tk.W) # row=6
Изменение цвета светофора при нажатии на кнопку:
def radCall():
radSel = radVar.get()
if radSel == 0:
traffic_lighter("Red")
elif radSel == 1:
traffic_lighter("Yellow")
elif radSel == 2:
traffic_lighter("Green")
СОЗДАНИЕ LabelFrame:
logger = ttk.Labelframe(tab1, text="Логовиця")
logger.grid(column=1, row=0, padx=8, pady=4)
ВЕСЬ КОД ПРОГРАММЫ:
def laba2():
for id in tabControl.tabs():
tabControl.forget(id)
tab1 = ttk.Frame(tabControl) # Create a tab
tabControl.add(tab1, text='Завдання 2') # Add the tab
tabControl.pack(expand=1, fill="both") # Pack to make visible
traffic = ttk.LabelFrame(tab1, text=' Світлофор ')
traffic.grid(column=0, row=0, padx=8, pady=4)
def _logger(msg="Hello"):
pass
def _popmenu(event, param):
pass
# СОЗДАНИЕ ЛОГО
logger = ttk.Labelframe(tab1, text="Логовиця")
logger.grid(column=1, row=0, padx=8, pady=4)
# Using a scrolled Text control
scrol_w = 30
scrol_h = 14
scrol = scrolledtext.ScrolledText(logger, width=scrol_w, height=scrol_h, wrap=tk.WORD)
scrol.grid(column=0, row=0, sticky="NESW", columnspan=3)
remove_control = ttk.LabelFrame(tab1, text=' Пульт ')
remove_control.grid(column=0, row=1, padx=8, pady=4)
logger_control = ttk.LabelFrame(tab1, text=' Логовиця ')
logger_control.grid(column=1, row=1, padx=8, pady=4)
def _cleaner_scrol():
pass
cleaner = ttk.Button(logger_control, text="Очистити", command=_cleaner_scrol)
cleaner.pack(padx=10, pady=20)
# First, we change our Radiobutton global variables into a list
colors = ["Red", "Yellow", "Green"]
def traffic_lighter(color=None):
for clr in range(3):
canvas = tk.Canvas(traffic, width=80, height=80, highlightthickness=1)
fill_color = colors[clr] if color == colors[clr] else None
traffic_lighter_color = colors[clr]
oval = canvas.create_oval(1, 1, 79, 79, fill=fill_color, outline="Black", tag="ovals")
canvas.grid(row=clr, column=4)
canvas.bind('<Button-1>', lambda event, param={"color": traffic_lighter_color,
"cur_color": fill_color,
}: _popmenu(event, param))
traffic_lighter()
# We have also changed the callback function to be zero-based, using the list
# instead of module-level global variables
# Radiobutton Callback
# ИЗМЕНЕНИЕ ЦВЕТОВ ПРИ НАЖАТИИ НА КНОПКУ
def radCall():
radSel = radVar.get()
if radSel == 0:
traffic_lighter("Red")
elif radSel == 1:
traffic_lighter("Yellow")
elif radSel == 2:
traffic_lighter("Green")
# create three Radiobuttons using one variable
radVar = tk.IntVar()
# Next we are selecting a non-existing index value for radVar
radVar.set(99)
# ТУТ СОЗДАЮТСЯ 3 РАДИОКНОПКИ
curRad = []
for col in range(3):
curRad.append(tk.Radiobutton(traffic, text=colors[col], variable=radVar,
value=col, command=radCall))
curRad[col].grid(column=col, row=1, sticky=tk.W) # row=6
# СОЗДАНИЕ ПУЛЬТА
chVar = tk.IntVar()
check1 = tk.Checkbutton(remove_control, text="Вкл.", variable=chVar)
check1.select()
check1.pack(padx=10, pady=20)
# ПРИ НАЖАТИИ НА ВКЛ, КНОПКИ ВКЛЮЧАЮТСЯ\ОТКЛЮЧАЮТСЯ (ПУЛЬТ)
def checkCallback(*ignoredArgs):
if chVar.get():
for i in range(3):
curRad[i]['state'] = 'normal'
pass
else:
for i in range(3):
curRad[i]['state'] = 'disabled'
traffic_lighter("None")
pass
chVar.trace('w', lambda unused0, unused1, unused2: checkCallback())
Ответы (1 шт):
Автор решения: insolor
→ Ссылка
Вам нужно добавлять текст не в LabeledFrame, а в текстовое поле ScrolledText. Это делается аналогично вставке в обычное текстовое поле Text:
import tkinter as tk
...
# tk.END означает, что текст будет добавляться в конце,
# после всего текста, что уже есть в текстовом поле
scrol.insert(tk.END, "text\n")
