如何使用Python创建textevariable标签(ttk)

时间:2012-04-16 11:28:54

标签: python label ttk

我正在尝试使用Label创建ttk

我的目标是创建一个小部件的点出现的小部件。 我创建了一个条目,我想显示该单词值得的分数。

这是我的代码:

这是创建Label

的功能
def create_variabletext_label2(root, col, row, val):
    val1 = IntVar()
    val1.set(m.comptabilisation_points(val.get()))

    # Here val is the value of the word input onto the entry widget
    # and m.comptabilisation_point() is a function that counts the
    # points of the word.
    label = Label(root, textvariable=val1)
    label.grid(column=col, row=row)
    return val1, label

以下是创建条目的功能:

def create_entry_string(root, width, col, row, columnspan, rowspan):
    val=StringVar()
    entry=ttk.Entry(root, width=width, textvariable=val)
    entry.grid(column=col, row=row, columnspan=columnspan, rowspan=rowspan)
    return val, entry

然后我调用这些函数:

val_entry_mot, entry_mot = create_entry_string(root, 15, 1, 1, 1, 1)
val_points, label_points = create_variabletext_label2(root, 1, 2, val_entry_mot)

我的问题是Label会一直显示0。 标签不会根据单词的分数而改变。

感谢您的帮助。 MFF

抱歉模糊不清。

其他信息:

我正在尝试创建一个Scrabble游戏。实际上,我的问题是我不知道如何显示这个词的价值。即使条目的值发生变化,标签也不会改变。

起初我认为val_entry_mot的价值并没有改变。所以我试图通过改变函数create_variable_text2()来显示输入的单词:

def create_variabletext_label2(root, col, row, val):
        label = Label(root, textvariable=val)
        label.grid(column=col, row=row)
        return val, label

有效。每次我在条目中更改单词时,标签都会显示单词。

然后,我认为应该计算单词的点的代码是有缺陷的。这是:

def comptabilisation_points(word):
    dico_values=values_scrabble()
    points=0
    for i in word.upper():
        points+=dico_values[i]
    return points

values_scrabble()是一个打开文件并将其转换为字典= {'A': 1, 'C': 3, 'B': 3, 'E': 1, 'D': 2, 'G': 2, 'F': 4, 'I': 1, 'H': 4, 'K': 10, 'J': 8, 'M': 2, 'L': 1, 'O': 1, 'N': 1, 'Q': 8, 'P': 3, 'S': 1, 'R': 1, 'U': 1, 'T': 1, 'W': 10, 'V': 4, 'Y': 10, 'X': 10, 'Z': 10}

的函数

当我试图计算一个单词的分数时,它确实有效。所以我想我的问题不在这里。

这是游戏的屏幕截图。这是法语,但你必须知道的是,顶部的第一个Entry是你输入单词的地方,下面的正文应该显示单词的分数。

Game screen shot

我希望我已经清楚了。谢谢。

MFF

1 个答案:

答案 0 :(得分:0)

val_entry_mot未设置并返回'',这解释了您的问题:

In [1]: val_entry_mot.get()
Out[1]: ''

因此,val1.set()无法正常运作。

如果直接将其设置为某个值,则代码可以正常工作,例如:

val1.set(123) # This properly renders "123" as Label text