How to send a variable to a sub dialog
-
On 26/12/2016 at 19:49, xxxxxxxx wrote:
Hello there,
How can I send the variable "Value" from the main dialog to the sub dialog, check script and screenshot below :
import c4d from c4d import gui, bitmaps NO = 21549 YES = 21547 CHECK_ICON = 21548 class subDialog(gui.GeDialog) : def CreateLayout(self) : self.SetTitle("Sub Dialog") self.GroupBegin(id=0, flags=c4d.BFH_SCALEFIT, cols=2) self.GroupBorderSpace(0, 0, 10, 0) bc = c4d.BaseContainer() fn = bitmaps.InitResourceBitmap(c4d.Tprotection) self.myBitButton=self.AddCustomGui(CHECK_ICON, c4d.CUSTOMGUI_BITMAPBUTTON, "Bitmap Button", c4d.BFH_SCALEFIT | c4d.BFV_SCALEFIT, 50, 50, bc) self.myBitButton.SetImage(fn, False) self.GroupBegin(id=0, flags=c4d.BFH_CENTER, cols=1) self.AddStaticText(7, c4d.BFH_LEFT, 0, 0, "The value " + **str(Value)** \+ " is higher than the recommended value", c4d.BORDER_NONE) **# Send the variable "Value" here** self.AddStaticText(7, c4d.BFH_LEFT, 0, 0, "Press YES to continue or NO to cancel", c4d.BORDER_NONE) self.GroupEnd() self.GroupEnd() self.AddSeparatorH(0, c4d.BFH_SCALEFIT) self.GroupBegin(id=0, flags=c4d.BFH_CENTER, cols=2) self.AddButton(YES, c4d.BFH_CENTER, 30, 15, name="YES") self.AddButton(NO, c4d.BFH_CENTER, 30, 15, name="NO") self.GroupEnd() return True def Command(self, id, msg) : if (id == YES) : self.Response = True self.Close() if (id == NO) : self.Response = False self.Close() return True class mainDialog(c4d.gui.GeDialog) : def CreateLayout(self) : self.SetTitle("Main Dialog") self.AddButton(11001, c4d.BFH_SCALEFIT, 0, 20, "Open Sub Dialog") return True def Command(self, id, msg) : if id == 11001: **Value = 1800 # How to send this variable to the sub dialog** if Value > 1500 : self.subDialog = subDialog() self.subDialog.Open(dlgtype=c4d.DLG_TYPE_MODAL, defaultw=300, defaulth=0) if self.subDialog.Response == True : print self.subDialog.Response else : print self.subDialog.Response return True def main() : global mainDialog mainDialog = mainDialog() mainDialog.Open(c4d.DLG_TYPE_MODAL, xpos=700, ypos= 200, defaultw=516, defaulth=10) return True if __name__=='__main__': main()
Thanks.
-
On 27/12/2016 at 02:39, xxxxxxxx wrote:
Hi,
You can simply pass the value via the constructor ( __init__() ) of your SubDialog class and store it as a member. You should initialize the Response member there too.
And you can also have methods in the _SubDialog _class to get and set the value. -
On 29/12/2016 at 07:41, xxxxxxxx wrote:
Hi, Thanks for your helpful comment.
The modified script :
import c4d from c4d import gui, bitmaps NO = 21549 YES = 21547 CHECK_ICON = 21548 class subDialog(gui.GeDialog) : **def __init__(self, Value) : self.Value = Value** def CreateLayout(self) : self.SetTitle("Sub Dialog") self.GroupBegin(id=0, flags=c4d.BFH_SCALEFIT, cols=2) self.GroupBorderSpace(0, 0, 10, 0) bc = c4d.BaseContainer() fn = bitmaps.InitResourceBitmap(c4d.Tprotection) self.myBitButton=self.AddCustomGui(CHECK_ICON, c4d.CUSTOMGUI_BITMAPBUTTON, "Bitmap Button", c4d.BFH_SCALEFIT | c4d.BFV_SCALEFIT, 50, 50, bc) self.myBitButton.SetImage(fn, False) self.GroupBegin(id=0, flags=c4d.BFH_CENTER, cols=1) self.AddStaticText(7, c4d.BFH_LEFT, 0, 0, "The value " + **str(self.Value)** \+ " is higher than the recommended value", c4d.BORDER_NONE) # Send the variable "Value" here self.AddStaticText(7, c4d.BFH_LEFT, 0, 0, "Press YES to continue or NO to cancel", c4d.BORDER_NONE) self.GroupEnd() self.GroupEnd() self.AddSeparatorH(0, c4d.BFH_SCALEFIT) self.GroupBegin(id=0, flags=c4d.BFH_CENTER, cols=2) self.AddButton(YES, c4d.BFH_CENTER, 30, 15, name="YES") self.AddButton(NO, c4d.BFH_CENTER, 30, 15, name="NO") self.GroupEnd() return True def Command(self, id, msg) : if (id == YES) : self.Response = True self.Close() if (id == NO) : self.Response = False self.Close() return True class mainDialog(c4d.gui.GeDialog) : def CreateLayout(self) : self.SetTitle("Main Dialog") self.AddButton(11001, c4d.BFH_SCALEFIT, 0, 20, "Open Sub Dialog") return True def Command(self, id, msg) : if id == 11001: Value = 1800 # How to send this variable to the sub dialog if Value > 1500 : **self.subDialog = subDialog(Value)** self.subDialog.Open(dlgtype=c4d.DLG_TYPE_MODAL, defaultw=300, defaulth=0) if self.subDialog.Response == True : print self.subDialog.Response else : print self.subDialog.Response return True def main() : global mainDialog mainDialog = mainDialog() mainDialog.Open(c4d.DLG_TYPE_MODAL, xpos=700, ypos= 200, defaultw=516, defaulth=10) return True if __name__=='__main__': main()