2013-06-22 3 views
1

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

def myupdater(self, current, total): 

    m = (Decimal(current)/Decimal(total)) 
    print "uploaded {0}/{1} so far".format(current, total) 
    self.gauge_1.SetValue(m) 
    print(m) 
    print (self.gauge_1.GetValue) 
    wx.Yield() 
    print"----------------------" 

И это показывает (калибровать только меняется на 100% в конце):

http://pastebin.com/eM40e6mv

Полный код: http://pastebin.com/uaThd5sD

+0

Показать полный код , – falsetru

+0

Полный код добавлен – jereksel

ответ

1

Gauge's range is int type. Passing значение меньше 1 рассматривается как 0. Изменение gauge_1 .. линии, как следующие:

self.gauge_1 = wx.Gauge(self.notebook_1_pane_1, -1, 100) 

Изменение myupdater как следующие:

def myupdater(self, current, total): 
    m = 100 * current/total 
    self.gauge_1.SetValue(m) 
    wx.Yield() 
+0

Спасибо большое !!! Он отлично работает – jereksel

0

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

import threading 

def myupdater(self): 
    while self.still_uploading: 
     #do stuff 

threading.Thread(target=myupdater).start() 
#upload stuff here 
+0

Пожалуйста, проверьте полный код – jereksel

+0

Я вижу неиспользуемый импорт класса Thread. Кажется, что ваш текущий код вызывает функцию myupdater только тогда, когда он загружается, вам нужно использовать модуль потоковой передачи. –