网格中数字的tkinter值

时间:2014-12-07 03:58:51

标签: python tkinter

我一直在使用tkinter包将随机位放入一系列tkinter.Label对象中,以表示8位二进制值的向量。我为此创建了以下matrix()函数:

import tkinter, random

window = tkinter.Tk()

def matrix():

    place = []
    nums  = [0, 1]

    for i in range(8):

        place.append(i)
        A_1 = tkinter.Label(window, text = random.choice(nums))

    A_1.configure(text = random.choice(nums))
    A_1.grid(row = random.choice(place), column = random.choice(place))

    window.after(1, matrix)

matrix()

tkinter.mainloop()

我现在想要找到存储在每个标签中的位的值,以将每个8位行转换为denary。如何访问存储在tkinter.Label对象中的数字的值?

谢谢!

1 个答案:

答案 0 :(得分:1)

可以使用tkinter.Label函数找到存储在cget("text")对象中的值。例如,以下代码将cget存储在str的{​​{1}}密钥中的tkinter.Label值 - 在本例中为字符串text - 和将其打印到控制台:

Spam, ham, and eggs.

但是,如果我们要在多个标签上引用多个值,则这不是一种特别好的编码方式。更理想的情况是,我们希望独立于标签跟踪import tkinter as tk from random import choice root = tk.Tk() my_label = tk.Label(root, text = "Spam, ham, and eggs.") my_label.grid(row = 0, column = 0) my_text = my_label.cget("text") print(my_text) root.mainloop() list中的这些文本值,并将这些存储值用于任何类型的处理,而不是从标签中绘制它们每一次。或者,您可以将dict自己存储在列表中,以便迭代地调用tkinter.Labels

此外,正如Bryan Oakley在评论中指出的那样,对于当前实现代码的方式,您实际上并没有按照预期更新标签,而是无限递归地将新标签写入根窗口之上。旧的。此外,您不会跟踪生成的标签,也不会记录给它们的值,这使得cget()访问它们变得不可行。

作为替代方法,首先为矩阵生成一系列cget()。您可能希望在标签中存储tkinter.Labels个对象而不是tkinter.StringVar个对象,以便您可以使用str类'tkinter.StringVar函数轻松更新标签显示的值反对每次都覆盖一个新标签。最后,考虑在控件中添加何时更新矩阵,而不是递归更新矩阵,例如set()

我想象你最终试图完成的一个更可行的例子可能类似于以下内容:

tkinter.Button

示例输出:

执行后:

after execution

点击“更新矩阵”按钮后:

after hitting the update matrix button