2013-11-28 3 views
1

Я изо всех сил, чтобы получить бар калибра к импульсу в то время как подпроцесс работает, так что я вернулся к основам и получил этот базовый код, который до сих пор не работаетWxPython манометр не пульсирует

import wx 

class GaugeFrame(wx.Frame): 
def __init__(self): 
    wx.Frame.__init__(self, None, -1, 'Gauge Example', size=(350, 150)) 
    panel = wx.Panel(self, -1) 
    self.gauge = wx.Gauge(panel, -1, 50, (20, 50), (250, 25)) 
    self.gauge.Pulse() 

app = wx.PySimpleApp() 
GaugeFrame().Show() 
app.MainLoop() 

Я попытался Примеры wxpython, которые показывают два датчика, используют wx.Timer, а другой - импульс. Когда я снимаю таймер, датчик, настроенный на импульс, перестает работать.

Поэтому я могу только думать, что датчик, даже настроенный на импульс, должен иметь таймер.

Это все верно?

Я попытался добавить

self.gauge.Refresh() 

и

self.gauge.Refresh(True) 

, но ни, кажется, помогает

Любое знает решение

благодаря

ответ

1

От Gauge document, вы должны называть это периодически после достижения определенного прогресса. Вы должны называть это снова и снова, чтобы показать прогресс, Pulse используется для неопределенного режима, но вы можете немного переместить, чтобы указать пользователю, что какой-то прогресс был достигнут.

Но если вы просто хотите обмануть прогресс, тогда да, вы должны привязать его к таймеру. Просто вызвать его в init не имеет никакого смысла.

Я модифицировал пример демонстрационного кода, чтобы просто обмануть, вы можете привязать его к вашему подпроцессу и установить некоторые контрольные точки и увеличить/уменьшить скорость колеи, если вы действительно хотите запустить его в неопределенном режиме.

import wx 

class GaugeFrame(wx.Frame): 
    def __init__(self): 
     wx.Frame.__init__(self, None, -1, 'Gauge Example', size=(350, 150)) 
     panel = wx.Panel(self, -1) 
     self.fool = 0 
     self.gspeed = 200 
     self.gauge = wx.Gauge(panel, -1, 50, (20, 50), (250, 25)) 
     self.timer = wx.Timer(self) 
     self.timer.Start(self.gspeed) 
     self.Bind(wx.EVT_TIMER, self.TimerHandler) 

    def __del__(self): 
     self.timer.Stop() 

    def TimerHandler(self, event): 
     self.fool = self.fool+1 
     if self.fool == 20: 
      self.fool = 0 
      self.gspeed = self.gspeed - 20 
      if self.gspeed <= 0: 
       self.timer.Stop() 
       self.ShowMessage() 
       self.Close() 
      else: 
       self.timer.Start(self.gspeed) 
     self.gauge.Pulse() 

    def ShowMessage(self): 
     wx.MessageBox('Loading Completed', 'Info', wx.OK | wx.ICON_INFORMATION) 


app = wx.PySimpleApp() 
GaugeFrame().Show() 
app.MainLoop() 
+0

так что у него нет возможности просто пропустить пульс при запуске до тех пор, пока я не установил self.gauage.SetValue (100), который покажет пользователю, что он завершен? – tjmgis

+0

Да, я даже не знаком с wxpython .. но это то, что я понял из документов. – DevC

Смежные вопросы