Найти - Пользователи
Полная версия: wxPython StatusBar - два вопроса
Начало » GUI » wxPython StatusBar - два вопроса
1
stryaponoff
Привет всем!
В ходе разработки интерфейса на 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 я новичок, поэтому буду рад конструктивным замечаниям по поводу построения моего кода. То есть если есть какие-то глупые вещи, прошу мне на них указать и объяснить, почему я сделал плохо, и как надо было делать :) Спасибо.
DuoV
Попробуйте посмотреть wxPython Examples - там можно многому научиться и разобраться на примерах. По статусбару и событиям на нем тоже есть примерчик, как сделать нормальный разделенный статусбар.
stryaponoff
Спасибо. В примерах нашёл единственный способ, о котором я думал и сам, но надеялся, что можно как-нибудь покрасивее, чем вычислять координаты курсора по клику и смотреть, какая секция статусбара находится под ним.

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

UPD: Проблема решилась с установкой Eclipse IDE (раньше делал всё без дебаггера). Теперь понял, что первый вызов функции происходил раньше, чем создавался статусбар. Поэтому она и работала (в последующие вызовы, когда статусбар уже был) и интерпретатор ругался на неё (т.к. при первом вызове его еще не было).
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB