2017-08-14 73 views
-1

完成後,我需要一個完成的變量來關閉窗口。菜單也是一個功能。我嘗試過root1.destory,但由於done函數無法看到root1是什麼,因爲它在一個函數內部,它說root1沒有定義。我將如何讓done函數了解root1是什麼並關閉它。這兩個函數都在其他地方調用。我正在使用函數,因爲我不希望它們直接啓動,只在被調用時纔會啓動。我的代碼是:如何讓函數讀取另一個函數

def edit_menu(): 


    root1 = Tk() 
    root1.title("Edit Menu") 

    menu = Frame(root1) 
    menu.pack(pady = 5, padx = 50) 
    var = StringVar(root1) 

    options = [ 
      "Forename", 
      "Surname", 
      "Email", 
      "Date of birth", 
      "Home address", 
      "Home phone number", 
      "Gender", 
      "Tutor group", 

] 
    option = OptionMenu(menu, var, options[0], *options, command=edit_functions) 


    var.set('Select') 

    option.grid(row = 1, column = 1) 

    root1.mainloop() 
    return edit_menu 

def done(): 
    print() 
    done = (input("If you have finnished editing, type done: ")) 
    if done == "done": 
     root1.destroy() 
+0

歡迎StackOverflow上。請閱讀並遵守幫助文檔中的發佈準則。 [最小,完整,可驗證的示例](http://stackoverflow.com/help/mcve)適用於此處。在發佈您的MCVE代碼並準確描述問題之前,我們無法爲您提供有效的幫助。 我們應該能夠將發佈的代碼粘貼到文本文件中,並重現您描述的問題。 您的發佈代碼不足以顯示方法或引發錯誤。 – Prune

+0

第一個問題是你在mainloop之後有一個函數。無論如何,沒有什麼能夠調用這個功能 –

+1

在這裏沒有足夠的東西來弄清楚你如何期待它的工作。一般來說,你可以使'done'成爲一個類方法,或者將'root1'作爲參數傳遞給'done'。既然沒有課程,也沒有主要課程,很難看到你想要的東西。 – Prune

回答

1

看樣子你剛纔給我們的整體的代碼,所以這個答案可能會認爲限制一個部分應該很容易讓你這個集成到你的代碼。

我們可以把所有我們需要的東西放在tkinter窗口的創建中,包括完成按鈕。

我認爲你正在尋找有這樣的事情:

from tkinter import * 

def edit_menu(): 

    root1 = Tk() 
    root1.title("Edit Menu") 

    menu = Frame(root1) 
    menu.pack(pady = 5, padx = 50) 
    var = StringVar(root1) 

    options = [ 
      "Forename", 
      "Surname", 
      "Email", 
      "Date of birth", 
      "Home address", 
      "Home phone number", 
      "Gender", 
      "Tutor group", 

    ] 
    option = OptionMenu(menu, var, options[0], *options) 

    var.set('Select') 
    option.grid(row = 1, column = 1) 

    done_btn = Button(root1, text = "Done", command = lambda: root1.destroy()) 
    done_btn.pack() 


    root1.mainloop() 

edit_menu() 
+0

這可能是一種更好的方式來實現它比我想要做的更好。謝謝。 – user8435959

相關問題