2015-03-25 3 views
-2
import Tkinter 
import tkMessageBox 
from Tkinter import * 

CanvasHeight = 500 
CanvasWidth = 600 

Ширина и высота холста установлены в 10x максимальных значений переменных. IsGraphHidden = 0TypeError: объект 'float' не имеет атрибута '__getitem__'. (Python)

MainWindow = Tkinter.Tk() 

Это окно для всех ползунков, и определяется как «MainWindow» для последующего использования.

Strength = DoubleVar() 
Multiple = DoubleVar() 
Time = DoubleVar() 

Все переменные, установленные в DoubleVar, из-за плагина Tkinter. Для этого нужны собственные специальные поплавки, целые числа и строки. Они могут быть доступны как обычные переменные с помощью VARIABLE.get()

coords = [] 
lastcoords = [0,0] 

Это то, что мы будем использовать, чтобы продолжить линию вместо того, чтобы просто иметь кучу линий рисунка себя от угла экрана.

Plot = DoubleVar() 

StrengthScale = Scale(MainWindow, variable = Strength, orient = HORIZONTAL,label="Strength") 

MultipleScale = Scale(MainWindow, variable = Multiple, from_ = float(0), to = float(1), resolution = float(0.01), orient = HORIZONTAL, label="Multiple") 

TimeScale = Scale(MainWindow, variable = Time, orient = HORIZONTAL, from_ = int(0), to = int(120), label="Time") 

Это процедуры для кнопок, а также для остальной части кода.

def Calculate(): 
    answer = float(Strength.get())*float(Multiple.get()) 
    tkMessageBox.showinfo("Answer:", answer) 

def PrepPlot(): 
global IsGraphHidden 
global coords 
global lastcoords 
lastcoords0 = lastcoords[0] 
lastcoords1 = lastcoords[1] 
coords.append(lastcoords0) 
coords.append(lastcoords1) 
coords.append(Time.get()*5) 
coords.append(Strength.get()*Multiple.get()*5) 
lastcoords = Time.get()*5 
lastcoords = Strength.get()*Multiple.get()*5 

if IsGraphHidden == 0: 
Graph = Canvas(MainWindow, width = CanvasWidth, height = CanvasHeight, bg = "white") 
Graph.create_line(coords, fill = "black") 
Graph.grid(row=5, column=1) 
else: 
Graph.destroy() 
Graph.delete("all") 
Graph.create_line(coords, fill = "black") 
Graph.grid(row=5,column=1) 
IsGraphHidden = 1 

def DisplayPoints(): 
PointWindow = Tkinter.Tk() 
Text = Label(PointWindow, textvariable = "Hi there", relief=RAISED) 
Text.pack() 
PointWindow.mainloop() #Work in progress, nothin' to see here. 

Button = Tkinter.Button(MainWindow, text= "Calculate",command = Calculate) 
PrepButton = Tkinter.Button(MainWindow, text = "Plot", command = PrepPlot) #The text is the text on the button. 
DisplayButton = Tkinter.Button(MainWindow, text = "Display Plots", command = DisplayPoints) 

MultipleScale.grid(row=0,column=0) 
StrengthScale.grid(row=1,column=0) 
TimeScale.grid(row=1,column=2) 
PrepButton.grid(row=2,column=1) 
Button.grid(row=4,column=1) 
DisplayButton.grid(row=3,column=1) 

MainWindow.mainloop() 

мне нужна помощь с ошибкой объекта поплавка GetItem, я делаю этот код для опыта работы в Манчестерском университете ...

+1

So **, где ** возникает ошибка? Пожалуйста, включите полную отслеживание для исключения. –

+1

Обратите внимание, что вам не нужно использовать 'int()' и 'float()' для буквенных значений. '0' is * уже * целое число,' 0.01' уже является объектом с плавающей точкой. 'int()' и 'float()' предназначены для преобразований, Python не требует деклараций типов. –

ответ

4

Вы заменил lastcoords списка с плавающей запятой:

lastcoords = Time.get()*5 
lastcoords = Strength.get()*Multiple.get()*5 

так что в следующий раз вокруг линии:

lastcoords0 = lastcoords[0] 

повышения ваше исключение, поскольку вы не можете использовать подписку на значение с плавающей запятой.

Я думаю вы хотите установить новый список вместо:

lastcoords = [Time.get() * 5, Strength.get() * Multiple.get() * 5] 
+0

Спасибо, я бы оценил, но у меня нет репутации. : D –

Смежные вопросы