将命令链接到Tkinter中的旋转框

时间:2014-11-10 18:56:51

标签: python python-2.7 tkinter

我正在为Tkinter脚本创建一个测量转换器,并希望添加一个旋转框,允许用户选择原始测量类型(目前只有英尺和米)并将其转换为另一个。旋转框将链接到一个条目小部件,但我似乎无法用一个按钮链接这两个小部件来转换测量。

这是我的spinbox代码:

    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))

如何将转换链接到旋转框和按钮以生成所需的输出?

2 个答案:

答案 0 :(得分: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()

概括来说,你需要一个用于输入和输出的旋转框和两个转换因子,一个到米,一个来自米。

答案 1 :(得分:0)

我知道这有一段时间,但我有一个稍好的解决方案。我不久前发布了一组可以安装pip的小部件,我仍然在改进它,称为tk_tools。在该包中有一个SmartSpinBox小部件,其中包含类内部的变量。

from tk_tools import SmartSpinBox

def callback(value):
    if value == 'feet':
        ConvertToFeet()
    else:
        ConvertToMeters()

ssb = SmartSpinBox(root, entry_type='str', values=('feet', 'meters'), callback=callback)
ssb.grid()

查看documentation了解更多有用的元素!