全局名称错误

时间:2013-04-23 13:44:12

标签: python variables global-variables ttk

我仍然是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定义为全局名称并使其可以访问其他功能? 谢谢你的帮助!

1 个答案:

答案 0 :(得分:1)

你可以做两件事:

全球化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