如果您問如何創建一個使用「數據」字段的綁定(即:%d
替換),您將不得不調用一些tcl代碼來實現此目的。這需要兩個步驟:創建一個調用python函數的tcl命令,並使用tcl將一個事件綁定到該函數。首先,我們來創建一個可以創建一個事件並設置「data」字段的Python程序(假定存在一個名爲root
的全局變量,我們稍後將創建它)。當調用此函數時,它將生成一個自定義事件,其數據字段由一個字符串填充。
def create_custom_event():
root.event_generate("<<Custom>>", data="Hello, world")
接下來,讓我們創建一個程序來調用上的按鈕按下
import tkinter as tk
root = tk.Tk()
button = tk.Button(root, text="click me", command=create_custom_event)
button.pack(side="top", padx=20, pady=20)
root.mainloop()
接下來,我們需要創建一個在生成事件時調用函數的功能。我們計劃設置data
字段,因此該函數必須接受一個值,該值是%d
替換的值。
def callback(detail):
print("detail: %s" % detail)
因爲要使用%d
替代,我們必須創建通過Tcl綁定。但是,tcl不會自動知道我們的python函數,所以我們必須使用tcl註冊函數。然後,只需通過tcl接口調用bind
即可設置綁定。
然後,第一步是註冊回調。我們已經創建了這個函數,我們只需要創建一個調用這個函數的tcl函數。幸運的是,tkinter使用register
命令爲我們提供了一種方法。您可以使用這樣的:
cmd = root.register(callback)
這需要一個Python函數(callback
在這種情況下),並創建一個Tcl命令將調用該函數。 register
返回存儲在名爲cmd
(名稱無關)的變量中的tcl命令的名稱
接下來,我們需要通過Tcl設置一個綁定來調用此命令。如果我們在實際的TCL腳本這樣做,則命令會是這個樣子(其中表示根窗口「」):
bind . <<Custom>> {callback %d}
蟒蛇相當於是這樣的:
root.tk.call("bind", root, "<<Custom>>", cmd + " %d")
公告在call
的參數和tcl參數之間存在1:1的對應關係。方便地,tkinter小部件的默認字符串表示形式是內部tcl名稱,所以我們可以直接在調用中使用小部件(雖然,可能我們應該使用str(root)
)。
全部放在一起給了我們這一點,打印出「細節:你好,世界」:當你說「我怎麼可以使用該功能」
import tkinter as tk
def callback(detail):
print("detail: %s" % detail)
def create_custom_event():
root.event_generate("<<Custom>>", data="Hello, world")
root = tk.Tk()
button = tk.Button(root, text="click me", command=create_custom_event)
button.pack(side="top", padx=20, pady=20)
cmd = root.register(callback)
root.tk.call("bind", root, "<<Custom>>", cmd + " %d")
root.mainloop()
,你是什麼意思,當你點擊按鈕通過「這個功能」?你是指'eval'?你問如何在綁定中使用'%d'? –
我的意思是「如何在綁定中使用%d」 – Iman