Уведомления

Группа в Telegram: @pythonsu

#1 Июль 29, 2010 12:52:15

stryaponoff
От:
Зарегистрирован: 2010-07-29
Сообщения: 2
Репутация: +  0  -
Профиль   Отправить e-mail  

wxPython StatusBar - два вопроса

Привет всем!
В ходе разработки интерфейса на wxPython возникло два вопроса:

Первый (наиболее важный):
Внутри класса есть две функции с практически одинаковым кодом (на данный момент), но вызываются по разным событиям. В обеих функциях нужно изменить текст в статусбаре. С первой функцией интерпретатор справляется без проблем. На второй ругается с пояснением AttributeError: ‘MainFrame’ object has no attribute ‘statusBar’ (считает, что в фрейме “MainFrame” нет “statusBar”, однако, он есть). Тем не менее интересный факт: функция работает не смотря на ошибку интерпретатора! Привожу код для ясности:

# Эта функция работает без проблем
def OnCurPosChange(self, event):
tab = self.GetCurrentTab()
self.statusBar.SetStatusText(u"Pos: " + str(tab.GetLinePos() + 1) + u", " + str(tab.GetColPos()), 1)
self.statusBar.SetStatusText(u"Lines: " + str(tab.GetTotalLines()), 2)
self.statusBar.SetStatusText(u"Chars: " + str(tab.GetTotalChars()), 3)

# Эта тоже работает, но почему-то интепретатор ругается
def OnTabChange(self, event):
tab = self.GetCurrentTab()
self.statusBar.SetStatusText(u"Pos: " + str(tab.GetLinePos() + 1) + u", " + str(tab.GetColPos()), 1)
self.statusBar.SetStatusText(u"Lines: " + str(tab.GetTotalLines()), 2)
self.statusBar.SetStatusText(u"Chars: " + str(tab.GetTotalChars()), 3)
self.statusBar.SetStatusText(tab.encoding, 4)
self.statusBar.SetStatusText(tab.lineformat, 5)
Вопрос номер два:
Статусбар разделён на несколько полей. Можно ли в wxWidgets, по нажатию на одно из полей, выводить контекстное меню? Поясняющая картинка:


P.S. В Python я новичок, поэтому буду рад конструктивным замечаниям по поводу построения моего кода. То есть если есть какие-то глупые вещи, прошу мне на них указать и объяснить, почему я сделал плохо, и как надо было делать :) Спасибо.



Офлайн

#2 Июль 30, 2010 03:33:59

DuoV
От:
Зарегистрирован: 2009-12-01
Сообщения: 27
Репутация: +  0  -
Профиль   Отправить e-mail  

wxPython StatusBar - два вопроса

Попробуйте посмотреть wxPython Examples - там можно многому научиться и разобраться на примерах. По статусбару и событиям на нем тоже есть примерчик, как сделать нормальный разделенный статусбар.



Офлайн

#3 Июль 30, 2010 12:58:30

stryaponoff
От:
Зарегистрирован: 2010-07-29
Сообщения: 2
Репутация: +  0  -
Профиль   Отправить e-mail  

wxPython StatusBar - два вопроса

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

А насчёт первого вопроса кто-нибудь подскажет что-нибудь?

UPD: Проблема решилась с установкой Eclipse IDE (раньше делал всё без дебаггера). Теперь понял, что первый вызов функции происходил раньше, чем создавался статусбар. Поэтому она и работала (в последующие вызовы, когда статусбар уже был) и интерпретатор ругался на неё (т.к. при первом вызове его еще не было).



Отредактировано (Июль 31, 2010 20:15:13)

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version