Форум сайта python.su
Привет всем!
В ходе разработки интерфейса на 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)
Офлайн
Попробуйте посмотреть wxPython Examples - там можно многому научиться и разобраться на примерах. По статусбару и событиям на нем тоже есть примерчик, как сделать нормальный разделенный статусбар.
Офлайн
Спасибо. В примерах нашёл единственный способ, о котором я думал и сам, но надеялся, что можно как-нибудь покрасивее, чем вычислять координаты курсора по клику и смотреть, какая секция статусбара находится под ним.
А насчёт первого вопроса кто-нибудь подскажет что-нибудь?
UPD: Проблема решилась с установкой Eclipse IDE (раньше делал всё без дебаггера). Теперь понял, что первый вызов функции происходил раньше, чем создавался статусбар. Поэтому она и работала (в последующие вызовы, когда статусбар уже был) и интерпретатор ругался на неё (т.к. при первом вызове его еще не было).
Отредактировано (Июль 31, 2010 20:15:13)
Офлайн