2016-04-18 1 views
0

Я новичок в Python (и вообще программировании), так что простите меня, если это глупый вопрос.GetPosition() не работает с wxPython

Я следую учебнику в книге по созданию графического интерфейса в Python. Сейчас я узнаю, как заставить Spin Control увеличивать некоторый статический текст. Когда я запускаю его, контроль спина показывает вверх, но консоль говорит «значение = event.GetPosition() AttributeError: объект„CommandEvent“не имеет атрибута„GetPosition“»

Код является:

import wx 

class Frame(wx.Frame): 
    def __init__(self, title): 
     wx.Frame.__init__(self, None,\ 
      title=title, size=(300,250)) 
     panel = wx.Panel(self) 

     sc = wx.SpinCtrl(panel, value='0', pos=(130, 50), size=(70, 25)) 
     self.valueText = wx.StaticText(panel, label='', pos=(130,80)) 

     sc.Bind(wx.EVT_SPINCTRL, self.spinControl) 

    def spinControl(self, event): 
     # Get spin control value 
     value = event.GetPosition() 
     # Update static text 
     self.valueText.SetLabel(str(value)) 

app = wx.App() 
frame = Frame("wxPython Widgets!") 
frame.Show() 
app.MainLoop() 

Этот код буквально скопирован/вставлен с сайта книги. У меня установлен wxPython, и все работает отлично до этого момента.

Halp!

ответ

1

Я работал через ту же книгу Python в день 2. Я считаю, что контент уже устарел.

If you change the line with GetPosition() to

value = event.GetEventObject().GetValue()

Правильно. Я могу подтвердить, что он работает для Python 2.7.11.

Jeremiah

0

Если вы измените строку с GetPosition() в

value = event.GetEventObject().GetValue() 

он будет работать. Событие просто не имеет атрибута GetPosition, поэтому он не может выполнить eb.

Если вы хотите проверить, какие функции и атрибуты доступны, вы можете использовать

print(dir(event)) 

Это покажет вам все, что доступно в случае.

Майкл