hi,
my bad, on mac, it's a lot faster than on windows.
If i add a sleep on the code (making it a lot slower) than the progress bar is there.
if you don't add time and make 100000 loop, you will see the bar update twice (or something like that).
You can't ask the UI to be refresh 100000 in one second.
I would try to see how many time my code take to do its job.

import c4d
from c4d import gui
import time
class TestDialog(gui.GeDialog):
PROGRESSBAR = 1001
ID_BTN_01 = 1002
ID_BTN_02 = 1003
def __init__(self):
self.progress = 0
def StopProgress(self):
print("stop progress")
self.progress = 0
progressMsg = c4d.BaseContainer(c4d.BFM_SETSTATUSBAR)
progressMsg.SetBool(c4d.BFM_STATUSBAR_PROGRESSON, False)
self.SendMessage(self.PROGRESSBAR, progressMsg)
def CreateLayout(self):
self.SetTitle("ProgressBar Example")
self.GroupBegin(id=1000, flags=c4d.BFH_SCALEFIT|c4d.BFV_TOP, cols=0, rows=1)
self.AddCustomGui(self.PROGRESSBAR, c4d.CUSTOMGUI_PROGRESSBAR, "", c4d.BFH_SCALEFIT|c4d.BFV_SCALEFIT, 0, 0)
self.GroupEnd()
self.GroupBegin(id = 1005, flags=c4d.BFH_SCALEFIT|c4d.BFV_TOP, cols=2, rows=1)
self.AddButton(self.ID_BTN_01, c4d.BFH_SCALEFIT, 100, 15, name="Do Something short")
self.AddButton(self.ID_BTN_02, c4d.BFH_SCALEFIT, 100, 15, name="Do Something longer")
self.GroupEnd()
return True
def Command(self, id, msg):
if (id == self.ID_BTN_01):
#do something short
opecnt = 100;
for x in range(opecnt):
self.progress += 1
progressMsg = c4d.BaseContainer(c4d.BFM_SETSTATUSBAR)
progressMsg[c4d.BFM_STATUSBAR_PROGRESSON] = True
progressMsg[c4d.BFM_STATUSBAR_PROGRESS] = self.progress/opecnt
self.SendMessage(self.PROGRESSBAR, progressMsg)
self.StopProgress()
if (id == self.ID_BTN_02):
# do seomthing longer
opecnt = 10000;
for x in range (opecnt):
time.sleep(0.0001)
self.progress += 1
progressMsg = c4d.BaseContainer(c4d.BFM_SETSTATUSBAR)
progressMsg[c4d.BFM_STATUSBAR_PROGRESSON] = True
progressMsg[c4d.BFM_STATUSBAR_PROGRESS] = self.progress/opecnt
self.SendMessage(self.PROGRESSBAR, progressMsg)
self.StopProgress()
return True
def AskClose(self):
self.StopProgress()
return False
if __name__=='__main__':
dialog = TestDialog()
dialog.Open(dlgtype=c4d.DLG_TYPE_ASYNC, pluginid=0, defaulth=400, defaultw=400)
cheers
Manuel