[爆卦]python按鈕觸發是什麼?優點缺點精華區懶人包

為什麼這篇python按鈕觸發鄉民發文收入到精華區:因為在python按鈕觸發這個討論話題中,有許多相關的文章在討論,這篇最有參考價值!作者FreedomMax (FreedomKnight)看板Python標題[問題] 關於bind中...


不好意思,我想請問一下
我最近在用 GUI 的時候
發現很多大大說在使用 bind 的時候
可以使用類似

btn.bind("<Button-1>", lambda event: fun())

我想問的就是,其中的 event 從哪裡來,還有從哪裡接收?
感覺上就算是 bind 的 function 主體裡面也接不到 event
還有就是誰產生 event 給他呀?

我只是想問這個有關 lambda 問題

稍微補充一下好了
在 tkinter 裡面

define hello:
print("hello")

btn = Button(text = "按鈕", command = add)
這樣這個按鈕就可以按一下就讓 function 跟按鈕事件結合

但我上網求助了一下要傳參數的話可以利用 lambda

def add(x, y):
return x + y

btn = Button(text = "add", command = lambda x = 5, y = 6: add(x, y))

這裡我都還大致理解

但是在 tkinter 裡面還有別種事件觸發的方式,
就是把事件名跟 function 用 bind 結合在一起

btn.bind("<Button-1>", lambda event, x = 5, y = 6: add(x, y))

看得出來 bind 是要求第二個參數是把 function 傳給 bind
最後透過 bind 幫我呼叫我傳入的 function

但我不懂的是他規定一定要有 event 這個參數
但他並沒有跟任何人結合在一起呀
而且我也自己做個 function 嘗試模仿一下
bind 好像沒辦法抓到 event 的說
頂多
btn.bind("<Button-1>", lambda event: add(5, 6), print(event))
頂多在 lambda 裡面可以印出 event 是個 object

所以我就不知道 tkinter 怎麼做到傳入 event 以及拿 event 出來
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 61.58.66.233
darkgerm:那是 lambda 的語法,event 是 lambda 的參數名字 07/23 12:05
darkgerm:f=lambda x,y: None 就跟 def f(x,y): return None 一樣 07/23 12:06
uranusjr:我想他的問題是那個傳進來的參數是哪來的 07/23 12:09
ck574b027:看到他用的標題我想的也跟一樓一樣,覺得他被用字誤導了 07/23 12:22
ya790206:哪套 gui lib? tkinter ? 07/23 12:57
FreedomMax:是 tkinter 沒錯 07/23 19:03
FreedomMax:我是知道那是參數,但是bind時並沒有給任何東西 07/23 19:04
FreedomMax:所以我在想,如果是我自己寫bind要怎麼接跟傳那個參數 07/23 19:05
FreedomMax:因為bind規定一定要有那個參數event,所以我不太懂運作 07/23 19:05
※ 編輯: FreedomMax 來自: 61.58.66.233 (07/23 19:19)
os653:看不太懂你的問題,如果答非所問請自動忽略 07/24 01:09
os653:看起來你搞錯bind的功能,bind不是幫你呼叫function的,bind 07/24 01:09
os653:是幫你註冊一個函數,讓系統在事件發生的時候自動調用。實際 07/24 01:12
os653:上呼叫該function的系統應該是類似大型的無限迴圈,它會一直 07/24 01:16
os653:檢查有沒有事件(event)發生,有事件發生的話,找找看有沒有 07/24 01:17
os653:註冊來處理該事件的函數,有就呼叫該函數,沒有就呼叫預設的 07/24 01:17
os653:處理函數。呼叫處理函數時給的參數格式當然是固定的,通常第 07/24 01:19
os653:一個就是該事件本身,可以讓處理函數知道該事件是由哪裡產生 07/24 01:23
os653:(滑鼠、鍵盤、etc..),第二個以後的就不一定,看tkinter規定 07/24 01:26
os653:建議去看wxpython in action這本書的第三章,Working in an 07/24 01:27
os653:event-driven enviroment,網路上中英文版都有,雖然實作上 07/24 01:28
os653:與tkinter絕對不同,但中心思想沒啥差,看完應該就能了解了 07/24 01:34
os653:題外話,tkinter其實不怎麼好用,資料也不大好找...也許是我 07/24 01:36
os653:太弱的關係XD 除了不用另外安裝以外,沒啥特別突出的優點 07/24 01:38
FreedomMax:感謝大大,其實我是知道他背後應該是有個事件隊列 07/24 04:03
FreedomMax:但我現在是打算假設換成是我要做那個bind 07/24 04:04
FreedomMax:那個event我是不知道誰傳過去的、以及誰去接收 07/24 04:05
FreedomMax:我該如何有辦法接收到那個lambda 中的 event 07/24 04:18
os653:tkinter底層是Tcl/Tk,所以想做到bind的功能應該很麻煩耶, 07/24 05:03
os653:如果不侷限在tkinter的話,wxpython要寫一個自己的bind倒是 07/24 05:03
os653:簡單許多 07/24 05:05
os653:把所有事件註冊到同一個函數在自己分派出去不知道可不可行? 07/24 05:12
os653:這兩篇看看合不合用http://ppt.cc/ySzw http://ppt.cc/J8gc 07/24 05:15

你可能也想看看

搜尋相關網站