我正在为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))
如何将转换链接到旋转框和按钮以生成所需的输出?
答案 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了解更多有用的元素!