【问题标题】:Tkinter: Updating fields located in different classesTkinter:更新位于不同类中的字段
【发布时间】:2020-06-19 15:51:15
【问题描述】:

我有一个烦人的问题。我正在尝试为我的应用程序创建基于类的前面板以保持整洁,但在更新子类窗口中的字段时遇到问题。

在以下代码中,“main_lbl”已正确更新,但 Frame_1 内的“dev_lbl”未正确更新。

class Frame_1(tk.Frame):
    def __init__(self, parent):
        tk.Frame.__init__(self, parent)
        ...
        self.dev_lbl = tk.Label(self, text="__init__")
        self.dev_lbl.pack(side="top", fill="x", expand=1)

class MainApp(tk.Tk):
    def __init__(self, master=None, title="MAIN", size="222x333+100+100"):
        super().__init__()

        EF = Frame_1(self).pack(side="top", padx=2, pady=2, fill="x", expand=True)
        self.main_lbl.tk.Label(self, text="Main init")
        self.main_lbl.pack(side="bottom")
        #<RUN mainloop()>
        self.update_GUI()
        self.mainloop()

    def update_GUI(self):
        update_delay = 10
        self.main_lbl["text"] = "updated"
        Frame_1(self).dev_lbl["text"] = "updated"
        self.after(update_delay, self.update_GUI)

root = MainApp(title="BRIDGE")

我也尝试过使用 tk.StringVar() ...同样的结果。

建议?

谢谢你, 拉多万

PS:实际上,我希望显示在单独的窗口中。我试过 tk.Toplevel:

class ShowVariables(tk.Toplevel):
    def __init__(self, parent=None):
        super().__init__(parent)
        self.parent = parent

        self.all_dev_lbl = tk.Label(self.Bot_frame, text="__init__")
        self.all_dev_lbl.pack(side="top", fill="x", expand=1)

但这也没有用。

【问题讨论】:

标签: python-3.x class tkinter


【解决方案1】:

您需要使用Frame_1 的实际实例,为此您需要保存一个引用:

class MainApp(tk.Tk):
    def __init__(self, master=None, title="MAIN", size="222x333+100+100"):
        super().__init__()
        ...
        self.EF = Frame_1(self)
        self.EF.pack(side="top", padx=2, pady=2, fill="x", expand=True)
        ...

一旦有了引用,就可以使用它来更新对象的属性:

def update_GUI(self):
    ...
    self.EF.dev_lbl["text"] = "updated"
    ...

【讨论】:

  • 该死!很简单。我试图用我的单线太高效。谢谢!
  • 您是否会知道文本是否可以在 Toplevel 窗口中不断更新(请参阅我的帖子中的 PS)?我可以在每个更新周期都获得一个静态文本或整个新的顶级窗口......都不理想......谢谢。
  • @RadovanUrban:是的,您可以在顶层和根窗口内的某处连续更新标签中的文本。
  • @brian-oakley 我仍然收到静态文本。我可能需要根窗口中的引用,就像框架一样......需要考虑一下......仍在学习:-)。干杯!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-06-18
  • 2017-11-28
  • 1970-01-01
  • 1970-01-01
  • 2018-08-05
  • 1970-01-01
相关资源
最近更新 更多