Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/359.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 将命令链接到Tkinter中的spinbox_Python_Python 2.7_Tkinter - Fatal编程技术网

Python 将命令链接到Tkinter中的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

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

这是我的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))

如何将转换链接到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
语句,应该使用一个。