2013-04-23 95 views
0

我对Python仍然很陌生,所以如果我的问题微不足道,或者甚至是愚蠢的,我都很抱歉。我正在尝试构建一个对Button的回调(不在代码中)作出反应的小模块。回调在main()函数中模拟。现在我的问题是,我无法弄清楚如何摆脱全球名称错误。它说drink0_ingred没有被定义为全局名称。我需要这个名为self.l0的标签作为文本。这是我到目前为止有:全局名称错误

import tkinter 
from tkinter import ttk 


def main(): 
    root = tkinter.Tk() 
    callback = callbackkb0() 
    drink0 = Drink0(root) 
    root.mainloop() 


def callbackkb0(): 
    with open(file="drink0_ingred.txt") as ingred0: 
     drink0_ingred = ingred0.read() 
    print(drink0_ingred) 
    return drink0_ingred 



class Drink0(ttk.Frame): 
    def __init__(self, root): 
     ttk.Frame.__init__(self, root) 
     self.grid() 
     self.widgets_create() 

    def widgets_create(self): 
     self.l0 = ttk.Label(self, text=drink0_ingred) 
     self.l0.grid() 


main() 

如何定义drink0_ingred作为全局名称并使其accessable其他功能? 感谢您的帮助!

+0

当你得到一个异常,请张贴,包括堆栈跟踪。 – 2013-04-23 13:45:40

+0

drink0_ingred没有在Drink0或widgets_create中定义。这就是你看到错误的原因。我想你会想把一个默认字符串,而不是在启动时未定义的变量。 – sashkello 2013-04-23 13:47:33

+0

好的,我会在下次做。 – user2304540 2013-04-23 14:23:25

回答

1

两件事情可以做:

Globalize的drink0_ingred

with open(file="drink0_ingred.txt") as ingred0: 
    global drink0_ingred 
    drink0_ingred = ingred0.read() 

调用函数,而不是调用变量:

self.l0 = ttk.Label(self, text=callbackkb0()) # Notice how I called the function 
               # because it returned drink0_ingred 
+0

谢谢,第一种方式完美地工作!我试过这个,但是我在创建它之后将drink0_ingred定义为全局...谢谢! – user2304540 2013-04-23 14:22:56

相关问题