tkinter:无法连接' str'并且'漂浮'对象

时间:2017-11-27 18:06:29

标签: python python-3.x

我想制作计算天然气价格的程序,但我的代码出错了。

from tkinter import *

root = Tk()
ment = StringVar()

root.geometry('450x450+500+300')
root.title('ბენზმთვლელი')


mlabel2 = Label(root, text='რეგულარი >> '+2.23+ 'GEL').pack()
mlabel3 = Label(root , text = 'ევრო რეგულარი >> '+2.29+' GEL').pack()
mlabel4 = Label(root, text="პრემიუმი >> " + 3.35 + " GEL").pack()
mlabel5 = Label(root, text='დიზელი >> ' + 2.25 + ' GEL').pack()
mlabel6 = Label(root, text='ევრო დიზელი >> '+2.33+' GEL').pack()

mlabel1 = Label(root, text="მიუთითეთ ბენზინის რაოდენობა(ლიტრებში)").pack()
mentry1 = Entry().pack()

mlabel7 = Label(root, text="მიუთითეთ ბენზინის დასახელება(ზემოთ ჩამოთვლილთაგან)").pack()
mentry2 = Entry().pack()

def gamotvla():
    if mlabel7 == mlabel3 or mlabel2 or mlabel4 or mlabel5 or mlabel6:
        print(mlabel1*mlabel7)
    else:
        print('რაღაც შეიყვანე შეცდომით!!')

mbutton = Button(root, text='გამოთვლა',fg="red",bg='black', command=gamotvla).pack()

root.mainloop()

错误:

   Traceback (most recent call last):
  File "/home/zura12337/Desktop/Python/Atom/tk.py", line 11, in <module>
    mlabel2 = Label(root, text='რეგულარი >> '+2.23+ 'GEL').pack()
TypeError: cannot concatenate 'str' and 'float' objects

你能帮助我吗?

2 个答案:

答案 0 :(得分:3)

这一行足以引起问题:

text='რეგულარი >> '+2.23+ 'GEL'

2.23是一个浮点值; 'GEL'是一个字符串。添加算术值和字母串是什么意思?

如果你想要字符串标签'რეგულარი >> 2.23 GEL',那就这样写吧。如果要从部件构造它,则将值转换为string:

text = 'რეგულარი >> ' + str(2.23) + 'GEL'

答案 1 :(得分:0)

让我们看看有问题的一行,并找出一些问题。 这是一行:

mlabel2 = Label(root, text='რეგულარი >> '+2.23+ 'GEL').pack()

您正在连接字符串,浮点数和另一个字符串。解决这个问题的最简单方法是使用一些字符串格式表达式,例如

mlabel2 = Label(root, text='რეგულარი >> {num} GEL'.format(num=2.23))

对于Python 3代码来说,这将是一个很好的解决方案......请注意{num}是一个格式化命令,可以用浮点数替换。还有其他方法可以解决这个问题,但是由于你使用的是Python 3,我会选择那个。此外,由于不同标签中的数字会发生变化,因此我将其分开,以便于使用。

此外,请记住,您的 mlabel2 将在您的代码中 None ,因为.pack()命令会返回。如果你想保留 mlabel2 ,你必须将声明分成两部分......

mlabel2 = Label(root, .... GEL')
mlabel2.pack()

大多数小部件都是如此,包括标签,条目和按钮。 if中的def gamotvla():声明也会给您带来问题,但让我们从这些声明开始。