SOLVED GeDialog in a Python Script does not work

Hello,

I'm probably missing something here, but I can't get a GeDialog in a Python Script (not plugin!) to work at all.

import c4d

class TestDialog(c4d.gui.GeDialog):

    BUTTON_ID = 1001

    def CreateLayout(self):
        self.SetTitle("A meaningful dialog title")
        self.AddButton(self.BUTTON_ID, c4d.BFH_SCALE|c4d.BFV_SCALE, 100, 25, "Close Dialog")
        #self.AddDlgGroup(c4d.DLG_OK|c4d.DLG_CANCEL)
        return True

    def Message(self, msg, result):
        return True

    def Command(self, id, msg):
        if id==self.BUTTON_ID:
          self.Close()
        return True

# Main function
def main():
    # Test dialog
    diag = TestDialog()
    diag.Open(dlgtype=c4d.DLG_TYPE_MODAL, defaultw=400, defaulth=400)


# Execute main()
if __name__=='__main__':
    main()

The only thing that happens when executing this script is that an empty dialog appears (the size is correct, but there is neither a dialog title, nor any gadgets) that can only be closed by force-quitting Cinema.

  • The console does not show any errors or exceptions.
  • I tested the same code in R20 and R19, both with the exact same result.
  • Manually calling diag.CreateLayout() before the diag.Open() call did not change anything.

What am I doing wrong?

Cheers,
Frank

0_1547547627704_dialogtest.png

Hi Frank, you actually return True from the Message method while the result of the parent call was expected

def Message(self, msg, result):
    return c4d.gui.GeDialog.Message(self, msg, result)

For more information please read the documentation about GeDialog.Message.

Cheers,
Maxime.

Hi Frank, you actually return True from the Message method while the result of the parent call was expected

def Message(self, msg, result):
    return c4d.gui.GeDialog.Message(self, msg, result)

For more information please read the documentation about GeDialog.Message.

Cheers,
Maxime.

Aaah, ok, thanks!

I browsed a couple of examples here in the forum, and always saw them return True. Should've known better 🙂

Cheers,
Frank