Python 将命令链接到Tkinter中的spinbox
我正在创建一个Tkinter脚本的测量转换器,并希望添加一个spinbox,允许用户选择原始测量类型(当前仅为英尺和米)并将其转换为其他类型。spinbox将链接到一个条目小部件,但我似乎无法用按钮链接这两个小部件以转换测量值 这是我的spinbox代码:Python 将命令链接到Tkinter中的spinbox,python,python-2.7,tkinter,Python,Python 2.7,Tkinter,我正在创建一个Tkinter脚本的测量转换器,并希望添加一个spinbox,允许用户选择原始测量类型(当前仅为英尺和米)并将其转换为其他类型。spinbox将链接到一个条目小部件,但我似乎无法用按钮链接这两个小部件以转换测量值 这是我的spinbox代码: self.SelectedLength = Tkinter.IntVar() measurements = ('Feet', 'Meters') sb = Spinbox(self, values=sorted(mea
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))
如何将转换链接到spinbox和按钮以产生所需的输出?根据我对您的描述的理解,下面的工作原理如下
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()
一般来说,您需要一个用于输入和输出的spinbox和两个转换因子的dict,一个到米,一个从米。我知道这需要一些时间,但我有一个更好的解决方案。不久前,我发布了一组pip可安装的小部件,我仍在改进它们,称之为
tk\u 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()
查看更多有用的元素 谢谢你的帮助,成功了。我试图使用两个
def
语句,应该使用一个。