在网格上查找小部件(tkinter)

6
使用tkinter模块,假设我创建了一个包含50个按钮小部件的网格,每个小部件都有不同的文本。我需要指定一些方式以便在某个行列中键入,这样我就可以获取该位置上的小部件文本。
例如,如果我需要获取网格第二列第三行处小部件的文本。我已经查阅了文档,但那只告诉我如何获取小部件信息,而我需要的是网格信息。

请澄清一下,很难理解您在问什么。您说每个按钮小部件都有一个文本,并且您想要那个文本,然后您又说您想要有关网格而不是按钮的信息... - joaquin
2个回答

6

不需要创建自己的函数或保留列表/字典,tkinter已经有内置的grid_slaves()方法。可以使用frame.grid_slaves(row=some_row, column=some_column)

下面是一个带有按钮网格的示例,演示了如何使用grid_slaves()检索小部件,并显示文本。

import tkinter as tk
root = tk.Tk()

# Show grid_slaves() in action
def printOnClick(r, c):
    widget = root.grid_slaves(row=r, column=c)[0]
    print(widget, widget['text'])

# Make some array of buttons
for r in range(5):
    for c in range(5):
        btn = tk.Button(root, text='{} {}'.format(r, c),
                        command=lambda r=r, c=c: printOnClick(r, c))
        btn.grid(row=r, column=c)

tk.mainloop()

1

你之前得到了一个关于如何将按钮对象保存在字典中以便通过它们在网格中的(列,行)位置来恢复它们的方法的先前答案

因此,如果self.mybuttons是你先前描述的按钮列表字典,那么你可以按以下方式获取行列位置上的文本:

abutton = self.mybuttons[arow][acolumn]
text_at_row_col = abutton["text"]

另一方面,如果你需要从按钮回调中获取文本:
button.bind("<Button-1>", self.callback)

然后您可以从事件中获取按钮文本,无需知道其行/列位置,只需按下它即可:

def callback(self, event):
    mybutton = event.widget
    text_at_row_col = mybutton["text"]

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接