2013-11-17 1 views
1

Я хотел бы сделать программу, которая рисует косинус-граф в диапазоне порядка. Но есть ошибка, которую я не могу исправить. Сообщение об ошибке: «г = INT (self.entry.get()) AttributeError: экземпляр программы не имеет записей атрибута»»Вот мой код:Cosinus drawing

# -*- coding: utf-8 -*- 

from Tkinter import Tk, W, E 
from ttk import Label, Button, Frame, Entry,Style 
import math 
import sys 
import matplotlib as mp 

class program(Frame): 

    def __init__(self,main): 

     Frame.__init__(self,main)   
     self.main = main  
     self.initUI() 

    def initUI(self): 

     self.main.title('COSINUSEK') 
     Style().configure('TFrame', background = 'black') 
     Style().configure('TLabel', background = 'black', foreground = 'blue') 
     Style().configure("TButton", background = 'red', foreground = 'blue') 


     self.rowconfigure(0, pad = 3) 
     self.rowconfigure(1, pad = 3) 
     self.rowconfigure(2, pad = 3) 
     self.rowconfigure(3, pad = 3) 
     self.rowconfigure(4, pad = 3) 

     self.columnconfigure(0,pad =3) 
     self.columnconfigure(1,pad =3) 
     self.columnconfigure(2,pad =3) 
     self.columnconfigure(3,pad =3) 
     self.columnconfigure(4,pad =3) 



     label = Label(self, text = 'Podaj zakres w stopniach').grid(row = 0,column = 3) 
     od = Label(self, text = '  OD').grid(row = 1, column =0) 
     do = Label(self, text = '    DO').grid(row = 1, column =4) 
     entry = Entry(self, justify = 'center').grid(row = 2,column = 0,columnspan = 2 ,sticky = E+ W) 
     entry1 = Entry(self, justify = 'center').grid(row = 2,column = 4,columnspan = 2, sticky = E) 
     button = Button(self, text = 'Ok',command = self.ok).grid(row = 3,column = 3) 
     button1 = Button(self, text = 'Draw', command = self.dra).grid(row = 4, column = 3) 

     self.pack() 

    def run(self): 
     self.main.mainloop() 

    def ok(self): 
     x = [] 
     y = [] 
     z = int(self.entry.get()) 
     w = int(self.entry1.get()) 
     i = w 
     while i in range(w,z): 
      x.append(i) 
      for a in x: 
       y[a] = math.cos((x[a]*math.pi)/180) 
      i = i + 0.01 
    def dra(self): 
     self.mp.ion() 
     self.mp.plot(self.x,self.y) 
     self.mp.title('Wykres') 
     self.mp.xlabel('x') 
     self.mp.ylabel('y') 
     self.mp.draw() 



program(Tk()).run() 

ответ

2

Заменить:

entry = Entry(self, justify = 'center').grid(row = 2,column = 0,columnspan = 2 ,sticky = E+ W) 
entry1 = Entry(self, justify = 'center').grid(row = 2,column = 4,columnspan = 2, sticky = E) 

в

self.entry = Entry(self, justify = 'center') 
self.entry.grid(row = 2,column = 0,columnspan = 2 ,sticky = E+ W) 
self.entry1 = Entry(self, justify = 'center') 
self.entry1.grid(row = 2,column = 4,columnspan = 2, sticky = E) 

В противном случае на линии z = int(self.entry.get()), self.entry не существует. Кроме того, метод grid ничего не возвращает, если вы делаете все в одной строке, как и вы, вы теряете свой объект Entry и влияете на None на entry.

+0

Спасибо большое :) – Maq92

0

При создании переменных, вы должны установить их как переменные экземпляра:

self.entry = Entry(self, justify = 'center').grid(row = 2,column = 0,columnspan = 2 ,sticky = E+ W) 
    self.entry1 = Entry(self, justify = 'center').grid(row = 2,column = 4,columnspan = 2, sticky = E) 
+1

Спасибо. Но есть еще ошибка: «z = int (self.entry.get()) AttributeError: объект« NoneType »не имеет атрибута« get »« – Maq92