Форум сайта python.su
Доброго времени суток. Заранее извиняюсь, если кому-то вопрос покажется легким до безобразия, но мне как-то непонятно. Суть такова: на фрейме, помимо различных виджетов, имеется объект timelb класса StaticText. Необходимо, чтобы в его лейбеле отображалось не системное время (примеров этого в сети завались), а значение таймера, обыкновенного уменьшающегося во времени значения таймера.
Функция самого таймера написана:
def timerstart():
i = 20
while i <= 0:
Tester.timelb.SetLabel(unicode(i))
i -= 1
time.sleep(1)
thread.start_new_thread(timerstart,())
Офлайн
Офлайн
VaderУпс, я как раз интересный код откопал относительно wxTimer, как раз ссылочка пригодилась. Однако на вики описывается случай с экстренным закрытием фрейма и остановкой его таймера, что как раз я и обрабатываю. Непонятно одно: как данную конструкцию
http://wiki.wxpython.org/Timer
def on_close(event):
timer.Stop()
frame.Destroy()
wx.EVT_CLOSE(frame, on_close)
def OnCloseWindow(self, event):
self.timer.Stop()
self.f.close()
self.Destroy()
def OnCloseWindow(self, event):
self.f.close()
on_close()
def on_close(event):
self.timer.Stop()
self.Destroy()
wx.EVT_CLOSE(Tester, on_close)
Отредактировано (Май 3, 2011 22:29:03)
Офлайн
VasCraftКакие именно ошибки?
…и вот тут вылезают ошибки ввода - вывода. И как это понимать?
def on_close(self, event):
...
VasCraftЭмммм… Что вы имеете ввиду?
Как вообще для какого-либо стандартного события добавить действий?
Отредактировано (Май 3, 2011 22:49:21)
Офлайн
VaderМильоны их )) шутка. Если серьезно, при запуске/закрытии вылезает маленькое окно с заголовком “wxPython: stdout/stderr”, то бишь косяк с выводом.VasCraftКакие именно ошибки?
…и вот тут вылезают ошибки ввода - вывода. И как это понимать?
VaderДа, вы правы. И что делать?
Попробую угадать. У вас on_close не является методом класса, потому и обращаться к переменным класса нельзя, должно же быть так:def on_close(self, event):
...
VaderХорошо, объясню. Допустим, у нас имеется стандартное событие wx.EVT_CLOSE. Оно конкретно отвечает за закрытие приложения. Суть проблемы состоит в том, как в это стандартное событие прилепить еще пару-тройку функций, например, остановить тот же самый таймер, ибо внутри конструкции OnCloseWindow он нифига не останавливается, и вызывает описанную мной ситуацию.VasCraftЭмммм… Что вы имеете ввиду?
Как вообще для какого-либо стандартного события добавить действий?
Офлайн
VasCraftСкорее всего, в этом окне то самое исключение из-за которого все поламалось.
при запуске/закрытии вылезает маленькое окно с заголовком “wxPython: stdout/stderr”, то бишь косяк с выводом
VasCraftСделать его методом класса.
Да, вы правы. И что делать?
VasCraftЕсли я правильно понял, то вы хотите, чтобы по одному событию вызывалось несколько методов, которые при этом могут находиться в разных классах. Так?
Хорошо, объясню. Допустим, у нас имеется стандартное событие wx.EVT_CLOSE. Оно конкретно отвечает за закрытие приложения. Суть проблемы состоит в том, как в это стандартное событие прилепить еще пару-тройку функций, например, остановить тот же самый таймер, ибо внутри конструкции OnCloseWindow он нифига не останавливается, и вызывает описанную мной ситуацию.
Отредактировано (Май 3, 2011 23:26:30)
Офлайн
VaderЛегко сказать, собсно, я этим и занимался ))VasCraftСделать его методом класса.
Да, вы правы. И что делать?
Ваш КО.
def on_close(event):
self.timer.Stop()
self.Destroy()
## хотя строка ниже - это лишнее
wx.EVT_CLOSE(self, self.on_close)
self.Bind(wx.EVT_CLOSE, self.OnCloseWindow)
Офлайн
VasCraftИ не должно, и святые литовцы в этом не помогут :)
Но, святые литовцы, оно не работает!!
Офлайн
Вообще же решил связать запуск таймера не с активацией фрейма, а с событием кнопки. И ведь заработало же! Может, косяк в активации фрейма?
Под “заработало” подразумевается запуск, циклическое обновление и безглючная остановка таймера при закрытии
Отредактировано (Май 3, 2011 23:52:47)
Офлайн
Это основной код
Офлайн