Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/user-interface/2.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 只有在TKTITE GUI中可用时才考虑值_Python_User Interface_Tkinter_Ttk - Fatal编程技术网

Python 只有在TKTITE GUI中可用时才考虑值

Python 只有在TKTITE GUI中可用时才考虑值,python,user-interface,tkinter,ttk,Python,User Interface,Tkinter,Ttk,我正在Tkinter上开发一个简单的GUI。我想要的是把所有填好的空格加起来,如果有的话。如果有空字段,只需将其视为“0” 然而,它并不成功,问题在于: value2 = float(c.get()) 错误是: ValueError: could not convert string to float: 代码如下: from Tkinter import * import ttk def plus(*args): value = float(a.get()) value

我正在Tkinter上开发一个简单的GUI。我想要的是把所有填好的空格加起来,如果有的话。如果有空字段,只需将其视为“0”

然而,它并不成功,问题在于:

value2 = float(c.get())
错误是:

ValueError: could not convert string to float:
代码如下:

from Tkinter import *
import ttk


def plus(*args):
    value = float(a.get())
    value1 = float(b.get())
    if c:
        value2 = float(c.get())
    else:
        value2 == float(0.0)
    if d:
        value3 = float(d.get())
    else:
        value3 == float(0.0)

    result.set(value + value1 + value2 + value3)

root = Tk()
root.title("Plus them")

mainframe = ttk.Frame(root, padding="10 10 10 10")
mainframe.grid(column=0, row=0, sticky=(N, W, E, S))
mainframe.columnconfigure(0, weight=1)
mainframe.rowconfigure(0, weight=1)

a = StringVar()
b = StringVar()
c = StringVar()
d = StringVar()
result = StringVar()

feet_entry = ttk.Entry(mainframe, width=5, textvariable=a)
feet_entry.grid(column=2, row=1, sticky=(W, E))

feet_entry1 = ttk.Entry(mainframe, width=5, textvariable=b)
feet_entry1.grid(column=5, row=1, sticky=(W, E))

feet_entry2 = ttk.Entry(mainframe, width=5, textvariable=c)
feet_entry2.grid(column=2, row=2, sticky=(W, E), pady = 5)

feet_entry3 = ttk.Entry(mainframe, width=5, textvariable=d)
feet_entry3.grid(column=5, row=2, sticky=(W, E), pady = 5)

ttk.Label(mainframe, text="the result is").grid(column=3, row=3, sticky=W)
ttk.Label(mainframe, textvariable = result).grid(column=5, row=3, sticky=(W, E))

ttk.Button(mainframe, text="Plus", command=plus).grid(column=3, row=4, sticky=W)

feet_entry.focus()
root.bind('<Return>', plus)
root.mainloop()
但这没用。正确放置它们的方法是什么?

c.get()并不总是返回类似“0.02”的值,如果没有用户输入,它将返回“”,在这种情况下,它将抛出一个异常,显示要传输的错误“”,以浮动。所以我修改了你的代码,添加了一些东西来检查用户输入

from Tkinter import *
import ttk


def inputToFloat(input):
    if isinstance(input, float):
        return input
    elif isinstance(input, basestring):
        input = input.strip()
        return 0.0 if not input else float(input)
    else:
        raise Exception("unsupported type")

def plus(*args):
    value = inputToFloat(a.get())
    value1 = inputToFloat(b.get())
    if c:
        value2 = inputToFloat(c.get())
    else:
        value2 == inputToFloat(0.0)
    if d:
        value3 = inputToFloat(d.get())
    else:
        value3 == inputToFloat(0.0)

    result.set(value + value1 + value2 + value3)

root = Tk()
root.title("Plus them")

mainframe = ttk.Frame(root, padding="10 10 10 10")
mainframe.grid(column=0, row=0, sticky=(N, W, E, S))
mainframe.columnconfigure(0, weight=1)
mainframe.rowconfigure(0, weight=1)

a = StringVar()
b = StringVar()
c = StringVar()
d = StringVar()
result = StringVar()

feet_entry = ttk.Entry(mainframe, width=5, textvariable=a)
feet_entry.grid(column=2, row=1, sticky=(W, E))

feet_entry1 = ttk.Entry(mainframe, width=5, textvariable=b)
feet_entry1.grid(column=5, row=1, sticky=(W, E))

feet_entry2 = ttk.Entry(mainframe, width=5, textvariable=c)
feet_entry2.grid(column=2, row=2, sticky=(W, E), pady = 5)

feet_entry3 = ttk.Entry(mainframe, width=5, textvariable=d)
feet_entry3.grid(column=5, row=2, sticky=(W, E), pady = 5)

ttk.Label(mainframe, text="the result is").grid(column=3, row=3, sticky=W)
ttk.Label(mainframe, textvariable = result).grid(column=5, row=3, sticky=(W, E))

ttk.Button(mainframe, text="Plus", command=plus).grid(column=3, row=4, sticky=W)

feet_entry.focus()
root.bind('<Return>', plus)
root.mainloop()
从Tkinter导入*
导入ttk
def inputToFloat(输入):
如果isinstance(输入,浮点):
返回输入
elif isinstance(输入,基串):
input=input.strip()
如果不是输入,则返回0.0,否则浮动(输入)
其他:
引发异常(“不支持的类型”)
def plus(*args):
value=inputOfloat(a.get())
value1=inputOfloat(b.get())
如果是c:
value2=inputOfloat(c.get())
其他:
值2==InputOfloat(0.0)
如果d:
value3=inputOfloat(d.get())
其他:
值3==InputOfloat(0.0)
结果.设置(值+值1+值2+值3)
root=Tk()
root.title(“加上他们”)
mainframe=ttk.Frame(根,padding=“10”)
grid(列=0,行=0,粘性=(N,W,E,S))
mainframe.columnconfigure(0,权重=1)
mainframe.rowconfigure(0,权重=1)
a=StringVar()
b=StringVar()
c=StringVar()
d=StringVar()
结果=StringVar()
英尺\输入=ttk.entry(主机,宽度=5,文本变量=a)
feet_entry.grid(列=2,行=1,粘性=(W,E))
Foots_entry1=ttk.Entry(主机,宽度=5,文本变量=b)
英尺入口1.网格(列=5,行=1,粘性=(W,E))
英尺入口2=ttk.Entry(主机,宽度=5,文本变量=c)
英尺入口2.网格(列=2,行=2,粘性=(W,E),帕迪=5)
英尺入口3=ttk.Entry(主机,宽度=5,文本变量=d)
英尺入口3.网格(列=5,行=2,粘性=(W,E),帕迪=5)
ttk.Label(mainframe,text=“结果是”).grid(column=3,row=3,sticky=W)
标签(大型机,textvariable=result).grid(列=5,行=3,粘性=(W,E))
ttk.按钮(大型机,text=“Plus”,command=Plus).grid(列=3,行=4,粘性=W)
foots_entry.focus()
root.bind(“”,加上)
root.mainloop()

在fhdrsdg的建议下,它被更改为以下内容,并且可以正常工作

def plus(*args):
    value = float(a.get())
    value1 = float(b.get())
    if c.get():
        value2 = float(c.get())
    else:
        value2 = 0.0
    if d.get():
        value3 = float(d.get())
    else:
        value3 = 0.0

    result.set(value + value1 + value2 + value3)

如果c:
如果d:
没有意义。它们总是正确的,因为
c
d
都是StringVars。尝试
如果c.get():
检查字符串是否为空。您还应该在
value2==float(0.0)
中使用一个=in。或者只使用
value2=0.0
,因为0.0已经是一个浮点。@jornsharpe,谢谢。@fhdrsdg,太棒了!!它起作用了。请你给我一个答案,让每个人都能直接看一看好吗?非常感谢。我需要时间来消化答案。如果无法将输入传输到浮点,则float()函数将抛出ValueError。因此,在这种情况下,您需要手动检测它。为什么要调用
inputToFloat(0.0)
?你把一个浮点数转换成一个浮点数,这是毫无意义的。
def plus(*args):
    value = float(a.get())
    value1 = float(b.get())
    if c.get():
        value2 = float(c.get())
    else:
        value2 = 0.0
    if d.get():
        value3 = float(d.get())
    else:
        value3 = 0.0

    result.set(value + value1 + value2 + value3)