def __init__(self, parent, choices, message, *args, **kwargs): super(ButtonsChoiceDialog, self).__init__(parent, *args, **kwargs) buttons = [] # Create components #panel = wx.Panel(self) panel = QWidget(self) #info_bmp = wx.ArtProvider.GetBitmap(wx.ART_INFORMATION, wx.ART_MESSAGE_BOX) #info_icon = wx.StaticBitmap(panel, wx.ID_ANY, info_bmp) info_icon = QIcon(":/info") #msg_text = wx.StaticText(panel, wx.ID_ANY, message) msg_text = QLabel(message) #buttons.append(wx.Button(panel, wx.ID_CANCEL, _("Cancel"))) buttons.append(QPushButton("Cancel")) for index, label in enumerate(choices): #buttons.append(wx.Button(panel, index + 1, label)) buttons.append(QPushButton(label)) # Get the maximum button width & height max_width = max_height = -1 for button in buttons: #button_width, button_height = button.GetSize() button_width, button_height = button.size() if button_width > max_width: max_width = button_width if button_height > max_height: max_height = button_height max_width += 10 # Set buttons width & bind events for button in buttons: if button != buttons[0]: button.SetMinSize((max_width, max_height)) else: # On Close button change only the height button.SetMinSize((-1, max_height)) #button.Bind(wx.EVT_BUTTON, self._on_close) button.clicked.connect(self._on_close) # Set sizers #vertical_sizer = wx.BoxSizer(wx.VERTICAL) vertical_sizer = QVBoxLayout() #message_sizer = wx.BoxSizer(wx.HORIZONTAL) message_sizer = QHBoxLayout() message_sizer.Add(info_icon) message_sizer.AddSpacer((10, 10)) #message_sizer.Add(msg_text, flag=wx.EXPAND) message_sizer.Add(msg_text) #vertical_sizer.Add(message_sizer, 1, wx.ALL, border=self.BORDER) vertical_sizer.addWidget(message_sizer) #buttons_sizer = wx.BoxSizer(wx.HORIZONTAL) buttons_sizer = QHBoxLayout() for button in buttons[1:]: buttons_sizer.addWidget(button) #buttons_sizer.AddSpacer((5, -1)) buttons_sizer.AddSpacer((-1, -1), 1) #buttons_sizer.Add(buttons[0], flag=wx.ALIGN_RIGHT) buttons_sizer.addWidget(buttons[0]) #vertical_sizer.Add(buttons_sizer, flag=wx.EXPAND | wx.ALL, border=self.BORDER) vertical_sizer.addWidget(buttons_sizer) #panel.SetSizer(vertical_sizer) panel.setLayout(vertical_sizer) #width, height = panel.GetBestSize() width, height = panel.size() self.SetSize((width, height * 1.3))