Я новичок в изучении Python и изучаю GUI tkinter.Я пытаюсь сделать очень простой проект для начинающих, который позволяет пользователю вводить что-то в текстовое поле и нажимать кнопку, после чего этот ввод добавляется к метке в другой части окна.
Однако,Я сталкиваюсь с проблемой, когда StringVar, который я использую в качестве вывода, не обновляется командой .set ().
def __init__(self):
self.window = Tk()
self.window.title("Terminal Writer 9000!")
self.terminalString = StringVar()
self.terminalString.set("This is an example message.")
self.allcontent = ttk.Frame(self.window)
self.allcontent.grid(row=0, column=0, sticky="nwse")
self.mainframe = ttk.Frame(self.allcontent)
self.mainframe.grid(row=0, column=0, sticky = "nwse", columnspan=4, rowspan=5)
self.terminal = ttk.Label(self.mainframe, textvariable=self.terminalString, padding=10, relief="sunken")
self.terminal.grid(row=0, column=0, rowspan=5, columnspan=2, sticky="nwse")
# GUI setup for Buttons and Entry box omitted...
play = TerminalWriterApp()
play.window.mainloop()
Однако область, используемая меткой терминала,пусто, хотя должно отображаться «Это пример сообщения».Во время устранения неполадок я сделал это, что, по сути, является полной копией / вставкой функциональных элементов моего исходного кода:
from tkinter import *
from tkinter import ttk
window = Tk()
strvar = StringVar()
strvar.set("Test 2")
allcontent = ttk.Frame(window)
allcontent.grid(row=0, column=0, sticky="nwse")
mainframe = ttk.Frame(allcontent)
mainframe.grid(row=0, column=0, sticky="nwse", columnspan=4, rowspan=5)
text = Label(mainframe, text="Test 1")
text.grid(row=0, column=0, sticky="nwse")
text2 = Label(mainframe, textvariable=strvar)
text2.grid(row=1, column=0, sticky="nwse")
window.mainloop()
Этот код работает по назначению, отображая окно с «Тест 1» и «Тест»2 "в отдельных строках.
Кто-нибудь знает, почему метод set () не будет работать в этом контексте?(Кроме того, не стесняйтесь злиться на мой ужасный код - мне нужно как-то выучить хорошие привычки!)