2015-05-05 1 views
0

Я нашел этот кусок кода онлайн. У меня есть несколько вопросов. Когда я запускаю программу, она говорит: «равнозначно» # метрам. Где/как отключается #? Выключен ли он с помощью ярлыка? Как получается, что метки не перекрываются каждый раз, когда вы нажимаете «расчет»? Благодарю.Как работает этот код? Изменение ярлыков?

from tkinter import * 
from tkinter import ttk 

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 = ttk.Entry(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() 

ответ

0

meters определяется как StringVar, и одна из меток определяется с помощью textvariable=meters. Поэтому метка берет свое значение непосредственно из StringVar, поэтому, когда вы меняете переменную с meters.set, значение метки изменяется автоматически. Удобная функция, о которой нужно знать!

+0

Спасибо вы очень – vanillacoke9191

1

Попробуйте следующее в интерактивной оболочке Python, чтобы понять, что происходит:

>>> from tkinter import * 
>>> root = Tk() 
>>> myvar = StringVar() 
>>> Label(root, text='Before').pack(side=LEFT) 
>>> Label(root, textvar=myvar).pack(side=LEFT) 
>>> Label(root, text='After').pack(side=LEFT) 

Теперь измените значение myvar с использованием метода set и посмотреть, что происходит с окном:

>>> myvar.set('foo bar') 
Смежные вопросы