В ходе разработки интерфейса на 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 я новичок, поэтому буду рад конструктивным замечаниям по поводу построения моего кода. То есть если есть какие-то глупые вещи, прошу мне на них указать и объяснить, почему я сделал плохо, и как надо было делать :) Спасибо.