2012-04-16 48 views
0

我正在嘗試使用ttk創建一個Label如何使用Python創建textevariable標籤(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是你輸入單詞的位置,正下方應該顯示單詞的點。

Game screen shot

我希望我已經清楚了。謝謝。

MFF

+0

什麼是'm.comptabilisation_points(val.get())'該怎麼辦? – cfedermann 2012-04-16 12:11:30

+0

好吧,它根據字典來計算單詞的點數,例如:{'A':1,'E':2,'K':10,...} – 2012-04-16 12:21:17

+0

無論如何,作爲'val.get()'只是返回一個空字符串(因爲它被初始化爲空字符串),所以你不能指望'val1.set()'有意義的輸出。 – cfedermann 2012-04-16 12:23:14

回答

0

val_entry_mot未設置並返回''這也解釋了你的問題:

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

因此,val1.set()無法正常運行。

如果直接將其設置爲某個值,你的代碼會工作,例如:

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

爲什麼'val_entry_mot'沒有設置?那麼,首先它是空的,但是當我輸入一個單詞時,'val_entry_mot'的值應該改變?不是嗎?然後,函數'm.comptabilisation_point()'應該返回一個整數... – 2012-04-16 12:24:09

+0

您必須檢查 - 給定您提供的最小代碼量我不能告訴你;但這似乎是你的問題的根源... – cfedermann 2012-04-16 12:25:35

+0

嗯,對不起,我要編輯我的問題:s並提供整個代碼。 – 2012-04-16 12:28:10