2014-07-12 34 views
-1

我對Python非常陌生,特別是使用Tkinter的新手。我有一個關於如何讓我的按鈕在GUI中實際創建的問題。Tkinter Button不會因功能錯誤而創建

我想做一個基本的按鈕,將從輸入框中輸入一個整數,並將其添加到當前餘額(一種小銀行應用程序)。問題是,當我運行代碼並點擊存款按鈕時,第二個應該產生於(在make_deposit()函數中定義的)的「Make Deposit」按鈕將不會產生,因爲在輸入爲將輸入框變成一個整數。據我所知,這個錯誤只是因爲在按下按鈕之前第二個「Make Deposit」按鈕試圖運行它的功能而創建的。有什麼辦法可以防止這種情況發生?以下是代碼,不包括與手頭問題無關的部分程序。

from Tkinter import * 

def get_entry(entry): 
    global s 
    s = entry.get() 
    s = int(s) 
    data["current"] += s 
    label = Label(root, text = "Current Balance: %d" % (data["current"])) 
    label.grid(row = 1, column = 0) 


def make_deposit(): 
    deposit = Entry(root, text = "Deposit Amount") 
    deposit.grid(row = 2, column = 0) 
    withdrawal.grid_forget() 
    deposit_button = Button(root, text = "Make Deposit", command = get_entry(deposit)) 
    deposit_button.grid(row = 3, column = 0) 

frame = Frame(root, height = 300, width = 300) 
frame.grid(row = 1, column = 0) 

label = Label(root, text = "ETA Until Car Purchase") 
label.grid(row = 0, column = 0) 

label = Label(root, text = "Current Balance: %d" % (data["current"])) 
label.grid(row = 1, column = 0) 

deposit = Button(root, text = "Make Deposit", command = make_deposit) 
deposit.grid(row = 2, column = 0) 

withdrawal = Button(root, text = "Make Withdrawal") 
withdrawal.grid(row = 3, column = 0) 

任何幫助將不勝感激,並請考慮,我是一個絕對的初學者到Tkinter的,讓我創造了一些GUI元素,可能不是這樣做的最佳方式方法帳戶。

+0

有什麼錯誤? – ZenOfPython

+0

總是添加'完整的錯誤信息'並且有問題的行數,所以在你的代碼中標記這行。 – furas

+0

如果你有問題,那麼使用'print'來查看你有什麼變量(在提問之前)。 – furas

回答

0

command=期望函數名稱不帶()和參數。

使用

command = get_entry(deposit) 

您運行功能get_entry(deposit)其結果被分配到command=
如果您想動態地將功能分配給command=,這很好。

但你需要lambda

command = lambda: get_entry(deposit) 
+0

謝謝!像魅力一樣工作! – user3808602

+0

順便說一句:當你在'for'循環中用'command ='使用'lambda'時,請注意。大多數初學者都有'i'的問題,因爲我在...中;命令= lambda:function(i)'。 – furas