2013-04-23 96 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

相關問題