Python 板


LINE

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







like.gif 您可能會有興趣的文章
icon.png[問題/行為] 貓晚上進房間會不會有憋尿問題
icon.pngRe: [閒聊] 選了錯誤的女孩成為魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一張
icon.png[心得] EMS高領長版毛衣.墨小樓MC1002
icon.png[分享] 丹龍隔熱紙GE55+33+22
icon.png[問題] 清洗洗衣機
icon.png[尋物] 窗台下的空間
icon.png[閒聊] 双極の女神1 木魔爵
icon.png[售車] 新竹 1997 march 1297cc 白色 四門
icon.png[討論] 能從照片感受到攝影者心情嗎
icon.png[狂賀] 賀賀賀賀 賀!島村卯月!總選舉NO.1
icon.png[難過] 羨慕白皮膚的女生
icon.png閱讀文章
icon.png[黑特]
icon.png[問題] SBK S1安裝於安全帽位置
icon.png[分享] 舊woo100絕版開箱!!
icon.pngRe: [無言] 關於小包衛生紙
icon.png[開箱] E5-2683V3 RX480Strix 快睿C1 簡單測試
icon.png[心得] 蒼の海賊龍 地獄 執行者16PT
icon.png[售車] 1999年Virage iO 1.8EXi
icon.png[心得] 挑戰33 LV10 獅子座pt solo
icon.png[閒聊] 手把手教你不被桶之新手主購教學
icon.png[分享] Civic Type R 量產版官方照無預警流出
icon.png[售車] Golf 4 2.0 銀色 自排
icon.png[出售] Graco提籃汽座(有底座)2000元誠可議
icon.png[問題] 請問補牙材質掉了還能再補嗎?(台中半年內
icon.png[問題] 44th 單曲 生寫竟然都給重複的啊啊!
icon.png[心得] 華南紅卡/icash 核卡
icon.png[問題] 拔牙矯正這樣正常嗎
icon.png[贈送] 老莫高業 初業 102年版
icon.png[情報] 三大行動支付 本季掀戰火
icon.png[寶寶] 博客來Amos水蠟筆5/1特價五折
icon.pngRe: [心得] 新鮮人一些面試分享
icon.png[心得] 蒼の海賊龍 地獄 麒麟25PT
icon.pngRe: [閒聊] (君の名は。雷慎入) 君名二創漫畫翻譯
icon.pngRe: [閒聊] OGN中場影片:失蹤人口局 (英文字幕)
icon.png[問題] 台灣大哥大4G訊號差
icon.png[出售] [全國]全新千尋侘草LED燈, 水草

請輸入看板名稱,例如:WOW站內搜尋

TOP