2012-10-28 125 views
2

我在網上發現了這個代碼,我想嘗試一下,因爲我試圖弄清楚如何讓我的標籤改變,而我在我的消息箱中鍵入東西。我嘗試了getmethod,但我一直在努力使用它。所以我發現這個代碼,當我嘗試它時,我得到的錯誤是ttk未定義,但它顯然是。Tkinter和ttk python2.7

from Tkinter import * 
from ttk import * 

def calculate(*args): 
    try: 
     value = float(feet.get()) 
     meters.set((0.3048 * value * 10000.0 + 0.5)/10000.0) 
    except ValueError: 
     pass 

root = Tk() 
root.title("Feet to Meters") 

mainframe = ttk.Frame(root, padding="3 3 12 12") 
mainframe.grid(column=0, row=0, sticky=(N, W, E, S)) 
mainframe.columnconfigure(0, weight=1) 
mainframe.rowconfigure(0, weight=1) 

feet = StringVar() 
meters = StringVar() 

feet_entry = ttkEntry(mainframe, width=7, textvariable=feet) 
feet_entry.grid(column=2, row=1, sticky=(W, E)) 

ttk.Label(mainframe, textvariable=meters).grid(column=2, row=2, sticky=(W, E)) 
ttk.Button(mainframe, text="Calculate", command=calculate).grid(column=3, row=3, sticky=W) 

ttk.Label(mainframe, text="feet").grid(column=3, row=1, sticky=W) 
ttk.Label(mainframe, text="is equivalent to").grid(column=1, row=2, sticky=E) 
ttk.Label(mainframe, text="meters").grid(column=3, row=2, sticky=W) 

for child in mainframe.winfo_children(): child.grid_configure(padx=5, pady=5) 

feet_entry.focus() 
root.bind('<Return>', calculate) 

root.mainloop() 

回溯(最近最後調用): 文件 「tk8.py」,第15行,在 大型機= ttk.Frame(根,填充= 「3 3 12 12」) NameError:名稱' TTK」沒有定義

回答

7

So i found this code and when i tried it i get the error that ttk is undefined but it clearly is.

你星級進口從模塊,雖然使用from ttk import *,故得名ttk不引用任何東西。例如,from math import *會將sincos等全部放入您的名稱空間,但名稱math仍然未定義。代碼工作對我來說,如果我進口切換到

from Tkinter import * 
import ttk 

ttk.Entry在此行中添加缺少的.

feet_entry = ttk.Entry(mainframe, width=7, textvariable=feet) 
+0

http://docs.python.org/library/ttk.html#using-ttk –

+0

好是工作的感謝。唯一的問題是代碼沒有做到我所希望的。你知道如何讓你的標籤改變你的消息框嗎?所以我輸入的每一個數字都會自動轉換而不需要按任何按鈕? – user1733141

0

您正在尋找trace_variable方法。這裏有一個固定的版本:

from Tkinter import Tk, StringVar 
import ttk 

def calculate(*args): 
    try: 
     value = float(feet.get()) 
     meters.set('%g' % (0.3048 * value)) 
    except ValueError: 
     if not feet.get(): 
      meters.set('') 

root = Tk() 
root.title("Feet to Meters") 

feet = StringVar() 
feet.trace_variable('w', calculate) 
meters = StringVar() 

main = ttk.Frame(root) 
main.grid(sticky='nsew') 

ttk.Label(main, text="Feet:").grid(row=0, sticky='e') 
feet_entry = ttk.Entry(main, width=7, textvariable=feet) 
feet_entry.grid(row=0, column=1, sticky='ew') 
feet_entry.focus() 

ttk.Label(main, text="Meters:").grid(row=1, sticky='e') 
ttk.Label(main, textvariable=meters).grid(row=1, column=1, sticky='ew') 

root.mainloop()