declaration of global in tkinter with import of module
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 | from tkinter import * from tkinter import ttk import calculation_feet_metres from calculation_feet_metres import * root = Tk() root.title("Feet to Metres") ''' def calculate(*args): try: value = float(feet.get()) metres.set((0.3048 * value * 10000.0 + 0.5)/10000.0) except ValueError: pass ''' mainframe = ttk.Frame(root, padding="3 3 12 12") mainframe.grid(column=0, row=0, sticky=(N,W,E,S)) mainframe.columnconfigure(0, weight=1) mainframe.rowconfigure(0,weight=1) feet =StringVar() metres = StringVar() feet_entry = ttk.Entry(mainframe, width = 7, textvariable = feet) feet_entry.grid(column=2, row=1, sticky=(W,E)) ttk.Label(mainframe, textvariable = metres).grid(column=2, row=2, sticky=(W,E)) ttk.Button(mainframe, text="Calculate", command = calculate).grid(column=3, row=3, sticky=W) ttk.Label(mainframe, text ='feet').grid(column=3, row=1, sticky=W) ttk.Label(mainframe, text ='is equivalent to').grid(column=1, row=2, sticky=E) ttk.Label(mainframe, text ='metres').grid(column=3, row=2, sticky=W) for child in mainframe.winfo_children(): child.grid_configure(padx=5, pady=5) feet_entry.focus() root.bind('<Return>', calculate) root.mainloop() |
以上返回
1 2 | value = float(feet.get()) NameError: global name 'feet' is not defined. |
如果我"激活"函数
我试图了解如何导入一个模块(在这种情况下,我还有一个包含相同
从不同模块导入的函数在它们被导入的模块中看不到全局变量。
全局变量对于定义函数的模块是"本地的"。
你可以将你的函数package在一个 lambda 中:
1 | ttk.Button(mainframe, text="Calculate", command = lambda: calculate(feet)).grid(column=3, row=3, sticky=W) |
并更改您的
1 | def calculate(feet): |