2016-03-17 1 views
0

Я делаю простой расчет GUI с помощью wxGlade.AttributeError: объект 'MyFrame' не имеет атрибута 'sommation'

После создания GUI через wxGlade и сгенерированный код, Я модифицировал и ввел какой-то конкретный код, чтобы функции вычислений, как и должно быть.

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

Выбрав добавление кнопки, пользователь выберет задачу добавления. Ниже приведен код:

def add(self, event): # wxGlade: MyFrame.<event_handler> 
     self.sommation = True 
     self.moins = False 
     self.multiply = False 
     event.Skip() 

То же самое относится к вычитании,

def moins(self, event): # wxGlade: MyFrame.<event_handler> 
     self.moins = True 
     self.sommation = False 
     self.multiply = False 
     event.Skip() 

и умножение

def multiply(self, event): # wxGlade: MyFrame.<event_handler> 
     self.multiply = True 
     self.sommation = False 
     self.moins = False 
     event.Skip() 

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

def calcul(self, event): # wxGlade: MyFrame.<event_handler> 

     if self.sommation == True : 
      self.c = int(self.text_ctrl_1.GetValue()) + int(self.text_ctrl_2.GetValue()) 
      self.somation == False 
     elif self.moins == True : 
      self.c = int(self.text_ctrl_1.GetValue()) - int(self.text_ctrl_2.GetValue()) 
      self.moins = False 
     elif self.multiply == True : 
      self.c = int(self.text_ctrl_1.GetValue()) * int(self.text_ctrl_2.GetValue()) 
      self.multiply = False 
     self.button_1.SetLabel(str(self.c)) 
     event.Skip() 

Проблема заключается в том, что я постоянно имея проблему ошибки атрибута цитируется по названию.

Здесь ошибка: error message

р/с, это полная программа

#!/usr/bin/env python 
# -*- coding: CP1252 -*- 
# 
# generated by wxGlade 0.6.8 (standalone edition) on Thu Mar 17 07:56:19 2016 
# 

import wx 

# begin wxGlade: dependencies 
import gettext 
# end wxGlade 

# begin wxGlade: extracode 
# end wxGlade 


class MyFrame(wx.Frame): 

    def __init__(self, *args, **kwds): 
     # begin wxGlade: MyFrame.__init__ 
     kwds["style"] = wx.DEFAULT_FRAME_STYLE 
     wx.Frame.__init__(self, *args, **kwds) 
     self.radio_btn_1 = wx.RadioButton(self, wx.ID_ANY, _("addition\n"), style=wx.RB_GROUP) 
     self.text_ctrl_1 = wx.TextCtrl(self, wx.ID_ANY, "") 
     self.radio_btn_2 = wx.RadioButton(self, wx.ID_ANY, _("subtraction")) 
     self.text_ctrl_2 = wx.TextCtrl(self, wx.ID_ANY, "") 
     self.label_1 = wx.StaticText(self, wx.ID_ANY, _("="), style=wx.ALIGN_CENTRE) 
     self.button_2 = wx.Button(self, wx.ID_ANY, "") 
     self.radio_btn_3 = wx.RadioButton(self, wx.ID_ANY, _("multiply")) 
     self.button_1 = wx.Button(self, wx.ID_ANY, _("calcul")) 

     self.__set_properties() 
     self.__do_layout() 

     self.Bind(wx.EVT_RADIOBUTTON, self.add, self.radio_btn_1) 
     self.Bind(wx.EVT_RADIOBUTTON, self.moins, self.radio_btn_2) 
     self.Bind(wx.EVT_RADIOBUTTON, self.multiply, self.radio_btn_3) 
     self.Bind(wx.EVT_BUTTON, self.calcul, self.button_1) 
     # end wxGlade 

    def __set_properties(self): 
     # begin wxGlade: MyFrame.__set_properties 
     self.SetTitle(_("frame_1")) 
     self.SetFont(wx.Font(20, wx.DEFAULT, wx.NORMAL, wx.NORMAL, 0, "")) 
     self.label_1.SetFont(wx.Font(16, wx.DEFAULT, wx.NORMAL, wx.NORMAL, 0, "")) 
     # end wxGlade 

    def __do_layout(self): 
     # begin wxGlade: MyFrame.__do_layout 
     sizer_1 = wx.GridSizer(3, 5, 0, 0) 
     sizer_1.Add((0, 20), 0, wx.ALIGN_CENTER_HORIZONTAL | wx.ALIGN_CENTER_VERTICAL | wx.SHAPED, 0) 
     sizer_1.Add(self.radio_btn_1, 0, wx.ALIGN_CENTER_HORIZONTAL | wx.ALIGN_CENTER_VERTICAL, 0) 
     sizer_1.Add((20, 20), 0, wx.ALIGN_CENTER_HORIZONTAL | wx.ALIGN_CENTER_VERTICAL | wx.SHAPED, 0) 
     sizer_1.Add((20, 20), 0, wx.ALIGN_CENTER_HORIZONTAL | wx.ALIGN_CENTER_VERTICAL | wx.SHAPED, 0) 
     sizer_1.Add((20, 20), 0, wx.ALIGN_CENTER_HORIZONTAL | wx.ALIGN_CENTER_VERTICAL | wx.SHAPED, 0) 
     sizer_1.Add(self.text_ctrl_1, 0, wx.ALIGN_CENTER_HORIZONTAL | wx.ALIGN_CENTER_VERTICAL | wx.SHAPED, 0) 
     sizer_1.Add(self.radio_btn_2, 0, wx.ALIGN_CENTER_HORIZONTAL | wx.ALIGN_CENTER_VERTICAL, 0) 
     sizer_1.Add(self.text_ctrl_2, 0, wx.ALIGN_CENTER_HORIZONTAL | wx.ALIGN_CENTER_VERTICAL | wx.SHAPED, 0) 
     sizer_1.Add(self.label_1, 0, wx.EXPAND | wx.ALIGN_CENTER_HORIZONTAL | wx.ALIGN_CENTER_VERTICAL | wx.SHAPED, 0) 
     sizer_1.Add(self.button_2, 0, wx.ALIGN_CENTER_HORIZONTAL | wx.ALIGN_CENTER_VERTICAL | wx.SHAPED, 0) 
     sizer_1.Add((20, 20), 0, wx.ALIGN_BOTTOM | wx.ALIGN_CENTER_HORIZONTAL | wx.ALIGN_CENTER_VERTICAL | wx.SHAPED, 0) 
     sizer_1.Add(self.radio_btn_3, 0, wx.ALIGN_CENTER_HORIZONTAL | wx.ALIGN_CENTER_VERTICAL, 0) 
     sizer_1.Add((20, 20), 0, wx.ALIGN_CENTER_HORIZONTAL | wx.ALIGN_CENTER_VERTICAL | wx.SHAPED, 0) 
     sizer_1.Add((20, 20), 0, wx.ALIGN_CENTER_HORIZONTAL | wx.ALIGN_CENTER_VERTICAL | wx.SHAPED, 0) 
     sizer_1.Add(self.button_1, 0, wx.ALIGN_CENTER_HORIZONTAL | wx.ALIGN_CENTER_VERTICAL | wx.SHAPED, 0) 
     self.SetSizer(sizer_1) 
     sizer_1.Fit(self) 
     self.Layout() 
     # end wxGlade 

    def add(self, event): # wxGlade: MyFrame.<event_handler> 
     self.sommation = True 
     self.moins = False 
     self.multiply = False 
     event.Skip() 

    def moins(self, event): # wxGlade: MyFrame.<event_handler> 
     self.moins = True 
     self.sommation = False 
     self.multiply = False 
     event.Skip() 

    def multiply(self, event): # wxGlade: MyFrame.<event_handler> 
     self.multiply = True 
     self.sommation = False 
     self.moins = False 
     event.Skip() 

    def calcul(self, event): # wxGlade: MyFrame.<event_handler> 

     if self.sommation == True : 
      self.c = int(self.text_ctrl_1.GetValue()) + int(self.text_ctrl_2.GetValue()) 
      self.somation == False 
     elif self.moins == True : 
      self.c = int(self.text_ctrl_1.GetValue()) - int(self.text_ctrl_2.GetValue()) 
      self.moins = False 
     elif self.multiply == True : 
      self.c = int(self.text_ctrl_1.GetValue()) * int(self.text_ctrl_2.GetValue()) 
      self.multiply = False 
     self.button_1.SetLabel(str(self.c)) 
     event.Skip() 

# end of class MyFrame 
if __name__ == "__main__": 
    gettext.install("app") # replace with the appropriate catalog name 

    app = wx.PySimpleApp(0) 
    wx.InitAllImageHandlers() 
    frame_1 = MyFrame(None, wx.ID_ANY, "") 
    frame_1 = MyFrame(None, wx.ID_ANY, "") 
    app.SetTopWindow(frame_1) 
    frame_1.Show() 
    app.MainLoop() 
+0

'MyFrame' имеет метод' add (self, event) 'вместо' add (...) '. Вы только что связали неправильный метод с событием? – Chickenmarkus

+0

Фактически добавление - это переменная, которую я создал, чтобы обозначить, что пользователь хочет сделать добавление. – maximus

+0

В вашем коде, вышеперечисленном выше, атрибут 'добавление 'не определяется и не упоминается, ни трассировка исключений, где ожидается атрибут. Пожалуйста, отправьте хотя бы трассировку, чтобы увидеть, где происходит исключение. – Chickenmarkus

ответ

0

Вы получите эту ошибку, если кто-то нажимает на кнопку CALCulate перед вводом номера; поскольку вы создаете только переменную в обработчиках кнопок.

Чтобы избежать этого, добавьте self.sommation = None в метод __init__, поэтому он имеет значение по умолчанию.

+0

Yerp, я просто замечаю эти проблемы. Спасибо за помощь – maximus

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