2017-02-26 58 views
-1

我的代码的目标是让滑块在编号改变时插入文本到文本框中。但是,我似乎无法找到导致“AttributeError:Label实例没有属性”插入“”错误的原因。AttributeError:标签实例没有属性“插入”

# -*- coding: utf-8 -*- 
import Tkinter 
from Tkinter import * 
root = Tkinter.Tk() #The root/base 

def math(): #This is the command that does the math 
    text.insert(Tkinter.END, base +height + radius) 
    text.see(Tkinter.END) 

text = Text(root, width=10, height=20, background='#FFFFFF') 
text.grid(row=0, rowspan=2, column=2) 

text = Tkinter.Label(root, text='Change slider\nTo Desired\nValue') 
text.grid(row=0, column=1) 
#### 
#Variables 
#### 
base = Tkinter.IntVar() 
base.set(0) 
height = Tkinter.IntVar() 
height.set(0) 
radius = Tkinter.IntVar() 
radius.set(0) 
#### 
#Sliders 
#### 

base_slider = Tkinter.Scale(root, from_=0, to=500, variable=base, 
         orient=Tkinter.HORIZONTAL, 
         label='Base', command=math) 
base_slider.grid(row=1, column=1) 

height_slider = Tkinter.Scale(root, from_=0, to=500, variable=height, 
         orient=Tkinter.HORIZONTAL, 
         label='Height', command=math) 
height_slider.grid(row=2, column=1) 

radius_slider = Tkinter.Scale(root, from_=0, to=500, variable=radius, 
         orient=Tkinter.HORIZONTAL, 
         label='Radius', command=math) 
radius_slider.grid(row=3, column=1) 

root.mainloop() 

谢谢你的帮助。

+0

您有两个相同的命名变量。第二个会覆盖第一个,它会丢失。您需要给其中一个不同的名称,并修改您的代码以在适用的情况下使用该名称。另外''text.insert(Tkinter.END,base + height + radius)'=>'text.insert(Tkinter.END,base.get()+ height.get()+ radius.get())' –

+0

Thanks Paul ,但现在我已经解决了上述问题,我得到了错误“TypeError:math()不需要参数(给出1)” – Henry

+0

给'math'一个参数。称它为你喜欢的,你没有使用它。 Tkinter用一个参数调用它,所以它需要有一个参数,即使你忽略它。同时将'数学下移到'text'的实例化之下。 –

回答

1

你有两个同名的变量。

您的LabelText小部件都称为text。由于标签是第二个要分配的对象,与之后的变量text相关联。

您认为您已插入Text小部件,但它是Label,它缺少该方法。

要修复它给小部件不同的名称。

修正了代码,问题的评论给了更多信息。

# -*- coding: utf-8 -*- 
import Tkinter 
from Tkinter import * 
root = Tkinter.Tk() #The root/base 

text = Text(root, width=10, height=20, background='#FFFFFF') 
text.grid(row=0, rowspan=2, column=2) 

label = Tkinter.Label(root, text='Change slider\nTo Desired\nValue') 
label.grid(row=0, column=1) 

def math(arg): #This is the command that does the math 
    text.insert(Tkinter.END, base.get() +height.get() + radius.get()) 
    text.see(Tkinter.END) 

#### 
#Variables 
#### 
base = Tkinter.IntVar() 
base.set(0) 
height = Tkinter.IntVar() 
height.set(0) 
radius = Tkinter.IntVar() 
radius.set(0) 
#### 
#Sliders 
#### 

base_slider = Tkinter.Scale(root, from_=0, to=500, variable=base, 
         orient=Tkinter.HORIZONTAL, 
         label='Base', command=math) 
base_slider.grid(row=1, column=1) 

height_slider = Tkinter.Scale(root, from_=0, to=500, variable=height, 
         orient=Tkinter.HORIZONTAL, 
         label='Height', command=math) 
height_slider.grid(row=2, column=1) 

radius_slider = Tkinter.Scale(root, from_=0, to=500, variable=radius, 
         orient=Tkinter.HORIZONTAL, 
         label='Radius', command=math) 
radius_slider.grid(row=3, column=1) 

root.mainloop()