2015-04-03 229 views
1

我需要一個tkinter按鈕來爲變量賦值,但我不知道如何。我不能只將該賦值放在按鈕回調函數中,因爲這將在本地回調函數中丟失。如何從主函數中的按鈕獲取值?點擊後從tkinter按鈕獲取返回值

下面是代碼:

def newfile(): 
    def create_file(entry): 
     file=open(entry.get(0),'w') 
     return file 
    chdir(askdirectory()) 
    name=Tk() 
    name.title("Name the File?") 
    prompt=Label(name, text="Enter name for new file:") 
    prompt.grid(row=0) 
    e=Entry(name) 
    e.grid(row=1) 
    e.insert(0, "Untitled") 
    create=Button(name, text="Create") 
    #Code I want the button to execute: current=create_file(e), name.destroy() 
    create.grid(row=2, column=3) 
    name.mainloop() 
    return current 

有誰知道?

此外,我需要能夠從newfile()返回檢索當前。

+3

請問您能提供一些代碼嗎?沒有它,很難看出你的問題是什麼。 – 2015-04-03 13:42:49

+0

它就在那裏。上下文是我正在創建一個文本編輯器。 – 2015-04-04 01:02:52

+0

您似乎確實有兩個問題:將數據('e')發送到您的回調函數中,並從中獲取返回值('file')。按鈕回調函數的API似乎不允許任何一個。 – 2015-04-04 11:54:23

回答

1

如果你使用nonlocal current,你應該能夠直接在create_file函數中設置當前變量,只要電流已經被定義了,它就可以工作。請記住將函數調用連接到按鈕command參數,並將其放入一個lambda函數中,以便您可以給它參數。在未來,雖然真的遵循了評論,整個代碼可以重組,使其看起來更明智...

def newfile(): 
    current = None 
    def create_file(entry): 
     nonlocal current 
     current = open(entry.get(),'w') 
     e.master.destroy() 
    chdir(askdirectory()) 
    name=Tk() 
    name.title("Name the File?") 
    prompt=Label(name, text="Enter name for new file:") 
    prompt.grid(row=0) 
    e=Entry(name) 
    e.grid(row=1) 
    e.insert(0, "Untitled") 
    create=Button(name, text="Create", command = lambda: create_file(e)) 
    create.grid(row=2, column=3) 
    name.mainloop() 
    return current 
+1

我想我已經明白了。 – 2015-04-05 17:38:37

+0

但是,如何從'newfile()'中獲取當前值?它也必須進入一個按鈕,我需要消除它。 – 2015-04-10 16:03:44

+0

'current'返回,只是存儲: 'file = newfile()' – Annonymous 2015-04-10 18:40:45

0

我會做的是創建一個類,在這個類中定義名稱和當前作爲類變量(self.name和self.current),所以我可以在沒有問題的類函數中修改它們。

+0

你是什麼意思?你能提供一些代碼嗎? – 2015-04-05 17:13:30