请原谅我的无知,因为我是Python的新手,正在尝试。
我正在创建一个仪表板,该仪表板允许用户打开文件。当用户打开文件时,软件会在同一行上添加一行,其中包含文件名,进度条和一些按钮。通过创建一个函数来完成行的创建,该函数在每次调用时都会递增行的值,以确保它不会替换现有行,而是在其下添加另一行以表示用户打开的最新文件。
假设仪表板上有两行,分别带有文件名和按钮。我的问题是,当我去按第一行上的按钮时,它认为我在按第二行上的按钮只是因为添加第二行时计数器设置为2,而我试图确定哪个按钮用户正在通过检查该行进行按压,但由于计数器而无法执行该操作。
无论如何,在调用create button函数时进行声明时,是否可以将行值“绑定”到按钮上,以便它们保留某种形式的ID,并且可以告诉用户与之交互的行?
我尝试在调用函数时为按钮分配一个ID,以标识正在按下哪个按钮以及在哪一行,但是当再次调用该函数时,所有行上的按钮都会被覆盖。
我还试图通过检查按钮的文本来检查用户所按下的按钮,但是无论用户界面上按钮的名称是否不同,调用该函数时,该按钮也会被覆盖。 / p>
非常感谢您的帮助。希望我足够清楚。
def OpenFile(self): # user opening file which creates row with button
print("Opening")
btnCreation(self)
def btnCreation(self): # function to create buttons dynamically
incrementFunction(self)
global EXEBtn
EXEBtn = Button(Main_frame,
text="Execute",
width=8,
command=self.Execute)
EXEBtn.grid(row=RowCounter, column=2, padx=3)
def incrementFunction(self):
global RowCounter
RowCounter = RowCounter + 1
def Execute(self):
# check which row the execute button was pressed on to do something
答案 0 :(得分:0)
一个简单而快速的解决方案是,使用如下的RowCounter
表达式为函数提供当前的lambda
值:
def btnCreation(self): # function that creates button dynamically
incrementFunction(self)
global EXEBtn
EXEBtn = Button(Main_frame,
text="Execute",
width=8,
command=lambda e=RowCounter: self.Execute(e))
EXEBtn.grid(row=RowCounter, column=2, padx=3)
此处的具体更改是command=lambda e=RowCounter.get(): self.Execute(e)
,更改了button命令的工作方式。基本上,它是创建一个lambda
表达式来保存RowCounter
的值,该值将在按下按钮时传递给Execute()
函数。