【问题标题】:Python Tkinter: Update entry field from another classPython Tkinter:从另一个类更新输入字段
【发布时间】:2017-11-28 19:53:27
【问题描述】:

我有一个 Python Tkinter GUI 类如下:

import Tkinter as tk 

class AppClient(tk.Frame):

    def __init__(self, master):
        error_class = ErrorClass()
        self.val_error_code = error_class.error_message

        tk.Frame.__init__(self, master)
        self.pack()

        ##Frame for error message display
        error_frame = tk.Frame(self, highlightbackground="violet", highlightcolor="violet", highlightthickness=1, width=600, height = 60, bd= 0)
        error_frame.pack(padx = 10, pady = 5, anchor = 'w')

        ## error code: Label and Entry
        tk.Label(error_frame, text = 'Error message').grid(row = 0, column = 0, sticky = 'w')
        self.error_code = tk.Entry(error_frame, background = 'white', width = 27)
        self.error_code.grid(row = 0, column = 1, sticky = 'w', padx = 5, pady = 5)

    def update_error_messsage(self):
        self.error_code.delete(0, 'end')
        self.error_code.insert(0, self.val_error_code)


if __name__ == '__main__':
    root = tk.Tk()
    app_client = AppClient(root)
    app_client.mainloop()

我想使用函数update_error_message 动态更新输入字段error_code。问题是,错误消息从另一个类 ErrorClass() 不断更新,我通过变量 error_message 将错误消息接收到我的 AppClient 类。

当变量error_message 的值在另一个类中更新时,我如何更新error_code 条目(ErrorClass())

【问题讨论】:

  • 如果问题与使用两个类有关,您需要给我们一个包含两个类的minimal reproducible example。
  • 我认为我为另一个问题发布的答案可能会对您有所帮助。我举了一个例子,说明如何与另一个班级的班级互动。看我的回答here。
  • @Bryan Oakley:我更新了 ErrorClass()。希望这会有所帮助
  • 我在ErrorClass 中没有看到您尝试与AppClient 类进行交互的任何地方。如果我将这两个类放在一个文件中并尝试运行它们,它不会重复您的问题。如果我们无法复制问题,我们就很难推荐修复方法。
  • 我的ErrorClass其实包含很多代码。我无法全部展示。这是一个 TFTP 客户端实现,在 ErrorClass 中我从 TFTP 服务器接收错误消息。我想在收到错误消息时动态更新 AppClient Tkinter GUI 中的错误消息。这些类位于单独的文件中。不在同一个文件中。

标签: python-2.7 class oop tkinter


【解决方案1】:

简单的解决方案是您需要在ErrorClass 内部引用AppClient 的实例,然后允许ErrorClass 的实例将新值传递给应用程序

例如:

class AppClient(tk.Frame):
    def __init__(self, master):
        error_class = ErrorClass(self)
        ...
    def update_error_messsage(self, error_code):
        self.error_code.delete(0, 'end')
        self.error_code.insert(0, error_code)

class ErrorClass():
    def __init__(self, app):
        self.app = app

    def update_error(self):
        ...
        error_code = 42
        self.app.update_error_message(error_code)

【讨论】:

    猜你喜欢
    • 2021-07-25
    • 1970-01-01
    • 2018-08-05
    • 1970-01-01
    • 1970-01-01
    • 2022-12-15
    • 2012-07-24
    • 2014-03-06
    • 1970-01-01
    相关资源
    最近更新 更多