[英]How to add a command option like a tkinter Button in this custome widget?
[英]How to pass methods to a Tkinter button widget command option from a tuple
我正在嘗試創建方法列表。 並嘗試是否可以將它們傳遞給按鈕小部件命令選項。我收到錯誤消息
TypeError: 'set' object does not support indexing
我如何在method_pointer元組旁邊為nav_button命令選項分配方法列表。
class ADB(Frame):
__init_(self,parent):
sel.parent=parent
self.nav_button=[]
for i in range(0,2):
self.nav_button.append(Button(self.parent)
def start(self) :
...........
def setup(self):
...........
self.nav_bttn_y=15
method_pointer={'self.start','self.setup'}
for i in range(0,2):
self.nav_button[i]["command"]= lambda :method_pointer[i]()
self.nav_button[i].place(x=10,y=self.nav_bttn_y)
self.nav_bttn_y +=40
問題在於{'self.start','self.setup'}
不是一個元組,而是一個set 。 而且集合沒有排序,因此method_pointer[0]
是沒有意義的。
如果要使用元組,只需將括號替換為括號即可:
method_pointer = ('self.start','self.setup')
如果您需要將其作為集合,則無法對其進行索引……但是您仍然可以對其進行迭代(盡管以任意順序),如下所示:
for i, method in enumerate(method_pointer):
self.nav_button[i]["command"]= lambda: method()
self.nav_button[i].place(x=10,y=self.nav_bttn_y)
self.nav_bttn_y +=40
實際上,即使有一個元組,這也是一個好主意。
在執行此操作時,您不需要lambda: method_pointer[i]()
; 它執行的方法與method_pointer[i]
,但是更加method_pointer[i]
差且速度慢。 (並且同樣,您不需要lamdba: method()
,而僅是method
。)
但是您還有另一個問題: 'self.start'
不是方法,而是字符串。 如果要使用self.start
方法,則需要傳遞它,且不帶引號。
因此,將它們放在一起(並修復您的IndentationError
,並對其進行部分PEP8化):
method_pointer = (self.start, self.setup)
for i, method in enumerate(method_pointer):
self.nav_button[i]["command"] = method
self.nav_button[i].place(x=10, y=self.nav_bttn_y)
self.nav_bttn_y += 40
當然,我不能保證這是代碼中的最后一個錯誤,如果您做錯了其他事情,它可能仍然無法工作。 但這至少解決了前三個問題。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.