[爆卦]tkinter button參數是什麼?優點缺點精華區懶人包

為什麼這篇tkinter button參數鄉民發文收入到精華區:因為在tkinter button參數這個討論話題中,有許多相關的文章在討論,這篇最有參考價值!作者leon80148 (leon)看板Python標題[問題] tkinter的Button無法帶...


我是新手幾乎沒啥基礎(其實大約十年前高中有學過一點C但忘光了),

最近誤入賊船買了深入淺出程式設計這本書

現在看到了第八章。教到了使用tkinter:

from tkinter import*
def save_data(x, y, z):
file = open("data.txt","a")
file.write("Deport:%s\nDescription:%s\nAddress:%s\n" %(x,y,z))

app = Tk()
app.title("test")
app.geometry('500x500+200+100')

Label(app,text ='Deport:',height=3).pack()
t1 = Entry(app)
t1.pack()

Label(app,text ='Description:',height=3).pack()
t2 = Entry(app)
t2.pack()

Label(app,text ='Address:',height=3).pack()
t3 = Entry(app)
t3.pack()

Button(app,text='save',width=10, command=save_data(t1.get(),t2.get(),t3.get()))
.pack()
app.mainloop()

這串主要是希望建立三個文字框,然後按下Button,可以自動儲存文字框內的資料。


書上的寫法是按下button後,直接執行函式,在函式中帶入文字框的值然後印出。
(就是直接再file.write()那串當中直接用get()獲得數值)

但我的寫法是希望按下button後,可以帶入文字框的值進入函式中,再印出。

但不知道為什麼我的方法總是失敗,一直無法順利得到想要的值。想了很久還是想不透


有稍微爬了一下文之後把command=save_data(t1.get(),t2.get(),t3.get())改成:

command=lambda:save_data(t1.get(),t2.get(),t3.get())
居然就可以成功了??!但我到現在還是不清楚原因。

是Button無法直接帶入有參數的函式嗎?

那加上"lambda:"這指令又是什麼意思?

抱歉問題有點長。希望有人可以幫助我一下...自己一個人學程式語言真的是很難阿!!


--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 114.46.136.82
※ 文章網址: https://www.ptt.cc/bbs/Python/M.1459267830.A.6B2.html
※ 編輯: leon80148 (114.46.136.82), 03/30/2016 00:10:52
ResolaQQ: command=save_data(t1.get(),t2.get(),t3.get()) 等同 03/30 01:45
ResolaQQ: save_data(t1.get(),t2.get(),t3.get()) 03/30 01:45
ResolaQQ: command=None 03/30 01:45
ResolaQQ: 一開始就已經執行完了,跟你按不按按鈕沒有任何關係 03/30 01:47
ResolaQQ: lambda 則會產生一個小函式供你後面呼叫,按鈕有效 03/30 01:51
ResolaQQ: 拿C++比喻,前面command獲得的是第一次執行函數的回傳值 03/30 01:53
ResolaQQ: lambda那個command獲得的是一個function pointer 03/30 01:54
ENEP: 是 lambda似乎是 多參數button command 的唯一解 03/30 17:19
uranusjr: Lambda 只是 closure 的特化, 怎麼可能會是唯一解... 03/30 21:00
Sunal: 記得檔案開了要關...不然就用with 03/31 00:03
Yshuan: 就是要一個callable給他 memeber要有access參數的方法 03/31 12:04
Yshuan: 而最簡單的方法就是lambda這樣包. 03/31 12:05
ENEP: 抱歉誤導了 意思是說要寫成單行的話 04/01 10:43
ENEP: 不然就要多包一層 04/01 10:43

你可能也想看看

搜尋相關網站