tkinter,文本在mac osx上不会立即更改

时间:2014-06-15 10:44:57

标签: python macos tkinter osx-mavericks

但单击按钮后,它会立即在Ubuntu上更改。在Mac上,当鼠标移出根窗口时,它会发生变化。

顺便说一下,msg框在Ubuntu的根窗口中居中,它按照预期在Mac的屏幕中居中。

#coding=utf8
import Tkinter as tk
import tkMessageBox as mb


class App(object):
    def __init__(self):
        self.root = tk.Tk()
        self.root.title('Root')
        self.root.geometry("500x500")
        self.frame = tk.Frame(self.root)
        self.set_var()
        self.content.pack()
        self.button.pack()
        self.frame.pack()

    def set_var(self):
        self.var = tk.StringVar(value="hello")
        self.content = tk.Label(self.frame, textvariable=self.var)
        self.button = tk.Button(self.frame, text='Show', command=self.var_change)

    def var_change(self):
        self.var.set("world")
        mb.showinfo("Title", "Hi", parent=None)
        self.var.set("hello")


def main():
    app = App()
    app.root.mainloop()

if __name__ == '__main__':
    main()

1 个答案:

答案 0 :(得分:1)

更改标签后添加对update_idletasks的调用 - 它会强制应用程序完成所有等待任务,然后再继续:

def var_change(self):
    self.var.set("world")
    self.root.update_idletasks()  # This forces the window to update
    mb.showinfo("Title", "Hi", parent=None)
    self.var.set("hello")