2014-11-10 2 views
0

Я создаю измерительный преобразователь для скрипта Tkinter и хотел бы добавить спинбокс, который позволяет пользователю выбирать оригинальный тип измерения (в настоящее время только ножки и метры) и преобразовывать его в Другие. Спинбокс будет привязан к виджету ввода, но я не могу связать два виджета с кнопкой, чтобы преобразовать измерения.ссылка команды на спинбокс в Tkinter

Это мой код со счётчиком:

self.SelectedLength = Tkinter.IntVar() 
    measurements = ('Feet', 'Meters') 
    sb = Spinbox(self, values=sorted(measurements), width=10, textvariable=self.SelectedLength) 
    sb.grid(column=1, row=1) 

И код для преобразования:

def ConvertToMeters(self): 
    value = float(self.entry.get()) 
    meters = ((0.3048 * value * 10000.0 + 0.5)/10000.0) 
    self.labelVariable.set("The converted length in meters is: " + str(meters)) 


def ConvertToFeet(self): 
    value = float(self.entry.get()) 
    feet = ((3.2808399 * value * 10000.0 + 0.5)/10000.0) 
    self.labelVariable.set("The converted length in feet is: " + str(feet)) 

Как связать преобразования с Счетчик и кнопки для получения желаемых результатов?

ответ

0

Следующие работы соответствуют моему пониманию вашего описания.

import tkinter as tk 


units = {'feet': (.3048, 'meters'), 'meters': (3.2808399, 'feet')} 
def convert(): 
    orig = unit.get() 
    mult, to = units[orig] 
    output.set(str(mult * float(entry.get())) + ' ' + to) 

root = tk.Tk() 
output = tk.StringVar() 
entry = tk.Entry(root) 
unit = tk.Spinbox(root, values=tuple(units), width=10, wrap=True) 
go = tk.Button(root, text='Convert', command=convert) 
display = tk.Label(root, textvariable=output) 
entry.grid(row=0, column=0) 
unit.grid(row=0, column=1) 
go.grid(row=0, column=2) 
display.grid(row=1, column=0) 
root.mainloop() 

Обобщая, вам потребуется для со счётчиком ввода и вывода и два dicts коэффициентов преобразования, от одного до метра и один из метров.

+0

Спасибо за помощь, это сработало. Я пытался использовать два 'def' заявления и должен был использовать один. – marion

+0

Если мой ответ сработал для вас, отметьте его как принятый. –

Смежные вопросы