0

我正在尝试创建一个Labelwith 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

抱歉含糊其辞。

附加信息:

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

起初我认为 的价值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顶部的第一个是您输入单词的位置,而正下方应该显示单词的点。

游戏画面截图

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

MFF

4

1 回答 1

0

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

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

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

如果您直接将其设置为某个值,您的代码将起作用,例如:

val1.set(123) # This properly renders "123" as Label text
于 2012-04-16T12:10:59.040 回答