StringVar().set() Not Adjusting StringVar



我是一个初学者,学习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(( 方法在这种情况下不起作用?(另外,请随时对我糟糕的代码生气 - 我需要以某种方式学习好习惯!

出于某些原因,标签会在应用获得焦点时出现(当您单击它时(;也许是因为堆栈嵌套帧 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()

最新更新