2015-11-29 117 views
1

我一直在尋找與python tkinter,因爲我對GUI的認真感興趣,並認爲這將是一個很好的起點。我經歷了一些很好的教程,比如新波士頓的設置和一兩個Theres來抓住基本的東西。現在我正試圖通過一個「論點」來傳遞一個「論點」,這樣我的程序就會轉向我的IF語句,而我沒有快樂。Tkinter按鈕命令參數

隨函附上代碼:

try: 
    from tkinter import * 
except ImportError: 
    from Tkinter import * 
eod = 'no' 
selection = [] 
selection1 = 'nothing' 
while eod != 'yes': 

    def beer(): 
     selection.append('Beer') 
     selection1 = 'Beer' 
    def wine(): 
     selection.append('Wine') 
    def whiskey(): 
     selection.append('Whiskey') 

    welcomeGUI = Tk() 
    welcomeGUI.geometry('400x200+100+200') 
    welcomeGUI.title('Drinks Despenser') 

    welcomLabel1 = Label(welcomeGUI, text='Drinks-O-Matic', font='Times 22 bold').grid(row=0,column=2) 
    welcomLabel2 = Label(welcomeGUI, text='Please select drink', font='Times 16 bold').grid(row=1,column=2) 


    beerButton = Button(welcomeGUI, text='Beer', font='Times 16 bold',command=beer()).grid(row=6,column=1) 
    wineButton = Button(welcomeGUI, text='Wine', font='Times 16 bold').grid(row=6,column=2) 
    whiskeyButton = Button(welcomeGUI, text='Whiskey', font='Times 16 bold').grid(row=6,column=3) 

    if selection1 is 'Beer': 
     welcomeGUI.destroy() 
     beerGUI = Tk() 
     beerGUI.geometry('400x200+100+200') 
     beerGUI.title('Beer Despenser') 

     beerGUI.mainloop() 


    welcomeGUI.mainloop() 

回答

2

好有很多事情在這裏,所以我有幾件事情,我認爲會幫助你。

您需要將您的def移出所有功能的while循環。它們應該在文件的開頭只定義一次。

另外,在調用grid方法後,您正將變量分配給Button對象。該方法返回None,所以你不應該這樣做,因爲你正在分配變量None而不是實際的按鈕對象,因爲你打算。您應該單獨爲按鈕對象分配變量,然後稍後再調用varname.grid()

最後,解決你的問題:當你寫command=beer()您再次調用該函數啤酒及其返回值的命令參數分配。當您使用Tkinter時,您必須僅將命令參數分配給函數名稱,例如command=beer。但是,如果您必須傳遞參數,則可以使用lambda。例如:command=lambda: beer(arg1, arg2)

P.S. 比較字符串時,你應該說

if selection1 == "Beer": 

if selection1 is "Beer": 

is試驗身份不平等和你想測試平等。

編輯:你也應該unindent try在您的文件的頂部。

也因爲選擇1是在功能beer它不會工作一個局部變量,需要聲明一個全局的

def beer(): 
    global selection1 
    selection.append('Beer') 
    selection1 = 'Beer' 

此外,你需要摧毀的同時,窗口或if語句循環將不會運行。

def beer(window): 
    global selection1 
    selection.append('Beer') 
    selection1 = 'Beer' 
    window.destroy() 

,然後你需要將welcomeGUI Tk的實例傳遞給函數像這樣

beerButton = Button(welcomeGUI, text='Beer', font='Times 16 bold',command=lambda: beer(welcomeGUI)).grid(row=6,column=1) 

最後一件事。我會一起刪除while循環,並在啤酒窗口上有一個按鈕來回調主歡迎窗口,因爲在while循環中放置兩個主循環不會是件好事。

+0

感謝上百萬的投入。 –