使用用户定义的模块不会更新Entry字段

时间:2014-05-17 20:09:41

标签: python tkinter

我在python3中有一个通过模块调用子程序的主程序。这很好,除了我的模块在模块中的其他地方进行更改时不会更新Entry字段。模块显示值被放在正确的位置,但窗口没有更新。以下是主程序的示例: -

# test - master

from tkinter import *

root=Tk()
root.title("Test for the update problem")

import changeEntryfield

changeEntryfield.fun() # call to function inside module

root.mainloop()

# end of master program

以下是调用的模块(存储为" changeEntryfield.py"): -

def fun():

    import tkinter 


    win=tkinter.Tk() # start a window

    g3=tkinter.StringVar()

    g3.set("text")

    a="something"

    field=tkinter.Entry(win,width=10,textvariable=g3)
    field.grid(column=1,row=0,sticky='W',padx=5,pady=5)

    grpslab3=tkinter.Label(win,text="The Field is: ")
    grpslab3.grid(column=0,row=0,sticky='W',padx=5,pady=5)

    # now do changes to field value

    g3.set(a)
    print ("1. In Entry, field = ",field['textvariable'])

    field['textvariable']=g3.get()
    print ("2. In Entry, field = ",field['textvariable'])

    field.config(textvariable=g3.get())
    print ("3. In Entry, field = ",field['textvariable'])

    field['textvariable']=a
    print ("4. In Entry, field = ",field['textvariable'])

    win.mainloop()

# end of module

有什么建议吗?

1 个答案:

答案 0 :(得分:0)

Tkinter不是以这种方式工作的。一个完整的程序一次只能有一个Tk个实例。您应该在子程序中创建Toplevel的实例。