我是一个初学者,学习Python并熟悉tkinter GUI内容。我正在尝试创建一个非常基础的初学者项目,该项目允许用户在文本框中键入内容并单击按钮,然后将输入添加到窗口另一部分的标签中。
但是,我遇到了一个问题,即我用作输出的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()方法在这种情况下不起作用吗? (此外,请随时对我的糟糕代码感到生气-我需要以某种方式学习好习惯!)
答案 0 :(得分:0)
由于某些原因,当应用程序获得焦点时(当您单击它时)会显示标签;也许是因为堆栈嵌套框架IDK。
您可以使用focus_force
来限制操作系统,以便立即将重点放在您的应用上。
from tkinter import *
from tkinter import ttk
class TerminalWriterApp:
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")
self.terminal.focus_force()
play = TerminalWriterApp()
play.window.mainloop()