Python Tkinter:更新另一个类的输入字段

时间:2017-06-26 00:38:25

标签: python-2.7 class oop tkinter

我有一个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()

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

如果变量error_code的值在另一个类(error_message)中更新

,我如何更新ErrorClass()条目

1 个答案:

答案 0 :(得分:2)

简单的解决方案是,您需要在AppClient内引用ErrorClass的实例,然后允许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)