我们从Python开源项目中,提取了以下25个代码示例,用于说明如何使用wx.BitmapFromImage()。
def show_file(self, imageFile, fullPath): """ Load the DICOM file, make sure it contains at least one image, and set it up for display by OnPaint(). ** be careful not to pass a unicode string to read_file or it will give you 'fp object does not have a defer_size attribute, or some such.""" ds = pydicom.read_file(str(fullPath)) ds.decode() # change strings to unicode self.populateTree(ds) if 'PixelData' in ds: self.dImage = self.loadPIL_LUT(ds) if self.dImage is not None: tmpImage = self.ConvertPILToWX(self.dImage, False) self.bitmap = wx.BitmapFromImage(tmpImage) self.Refresh() # ------ This is just the initialization of the App ------------------------- # ======================================================= # The main App Class. # =======================================================
def UpdateImage2D(self): object = self.object imagedata = numpy.array(object, dtype=numpy.double) imagedata[imagedata < 1e-6] = 1.0 imagedata = numpy.log(imagedata) imagedata = imagedata - imagedata.min() if imagedata.max() > 0: imagedata = (255.0/imagedata.max())*imagedata else: imagedata = 255.0*imagedata imagedatalow = numpy.uint8(imagedata) self.impil = Image.fromarray(imagedatalow, 'L').resize((self.sx,self.sy)) self.imwx = wx.EmptyImage( self.impil.size[0], self.impil.size[1] ) self.imwx.SetData( self.impil.convert( 'RGB' ).tobytes() ) bitmap = wx.BitmapFromImage(self.imwx) self.bmp = bitmap self.image.SetBitmap(bitmap) self.Refresh() self.Layout()
def updateUI(self, capsdir): print("---UPDATING USER INTERFACE ---") capsdir = self.capsfolder_box.GetValue() fframe = self.firstframe_box.GetValue() lframe = self.lastframe_box.GetValue() if fframe == '': fframe = 0 if lframe == '': lframe = len(cap_files) - 1 last_pic = str(capsdir + cap_files[lframe]) first_pic = str(capsdir + cap_files[fframe]) self.firstframe_box.SetValue(str(fframe)) self.lastframe_box.SetValue(str(lframe)) self.updatelastpic(lframe) self.updatefirstpic(fframe) #Cap graph cap_size_graph = self.graph_caps(cap_files, graphdir) scale_size_graph = first_pic = self.scale_pic(cap_size_graph, 300) self.cap_thumb.SetBitmap(wx.BitmapFromImage(scale_size_graph))
def view(self, file): ''' Called when loading a new image. Pass arg bytesIO image file ''' img = wx.Image(file, wx.BITMAP_TYPE_ANY) # scale the image, preserving the aspect ratio W = img.GetWidth() H = img.GetHeight() if W > H: NewW = self.PhotoMaxSize NewH = self.PhotoMaxSize * H / W else: NewH = self.PhotoMaxSize NewW = self.PhotoMaxSize * W / H img = img.Scale(NewW, NewH) self.imageCtrl.SetBitmap(wx.BitmapFromImage(img)) self.panel.Refresh()
def layout(self): """ Layout the widgets on the panel """ self.mainSizer = wx.BoxSizer(wx.VERTICAL) btnSizer = wx.BoxSizer(wx.HORIZONTAL) img = wx.EmptyImage(self.photoMaxSize,self.photoMaxSize) self.imageCtrl = wx.StaticBitmap(self, wx.ID_ANY, wx.BitmapFromImage(img)) self.mainSizer.Add(self.imageCtrl, 0, wx.ALL|wx.CENTER, 5) self.imageLabel = wx.StaticText(self, label="") self.mainSizer.Add(self.imageLabel, 0, wx.ALL|wx.CENTER, 5) btnData = [("Previous", btnSizer, self.onPrevious), ("Slide Show", btnSizer, self.onSlideShow), ("Next", btnSizer, self.onNext)] for data in btnData: label, sizer, handler = data self.btnBuilder(label, sizer, handler) self.mainSizer.Add(btnSizer, 0, wx.CENTER) self.SetSizer(self.mainSizer)
def loadImage(self, image): """ Load the image into the application for display """ image_name = os.path.basename(image) img = wx.Image(image, wx.BITMAP_TYPE_ANY) # scale the image, preserving the aspect ratio W = img.GetWidth() H = img.GetHeight() if W > H: NewW = self.photoMaxSize NewH = self.photoMaxSize * H / W else: NewH = self.photoMaxSize NewW = self.photoMaxSize * W / H img = img.Scale(NewW,NewH) self.imageCtrl.SetBitmap(wx.BitmapFromImage(img)) self.imageLabel.SetLabel(image_name) self.Refresh() Publisher().sendMessage("resize", "")
def convert(self): self.Bind(wx.EVT_TIMER, self.OnTimer2, self.timer2) self.dltext.SetLabel(self.query) self.panel.Layout() imageFile = 'Files\image.jpg' data = open(imageFile, "rb").read() # convert to a data stream stream = cStringIO.StringIO(data) # convert to a bitmap bmp = wx.BitmapFromImage( wx.ImageFromStream( stream )) # show the bitmap, (5, 5) are upper left corner coordinates thumb = wx.StaticBitmap(self, -1, bmp, (90,255)) self.Hide() self.Show() self.text.SetLabel('Converting...') if self.rb1.GetValue() == True: self.timer2.Start(1000) worker1 = threading.Thread(target=lambda: self.getfile.get_file('http://www.youtube.com/%s'%self.vidurl, '320')) worker1.start() elif self.rb2.GetValue() == True: self.timer2.Start(600) worker1 = threading.Thread(target=lambda: self.getfile.get_file('http://www.youtube.com/%s'%self.vidurl, '128')) worker1.start()
def BuildTimeline(self,dbfile): for child in self.panel3.GetChildren(): logging.exception(child) child.Destroy() # the last frame is latestfram = self.cur.execute("SELECT * FROM Timeline ORDER BY Image DESC LIMIT 1") #latestfram = self.cur.execute("SELECT * FROM Timeline WHERE ID = (SELECT MAX(ID) FROM TABLE) AND Blackspot = 0"); try: for entry in latestfram: self.framlog = int(entry[1].split('.')[0]) self.framlog += 1 logging.exception(self.framlog) except: logging.exception('Looking for last frame but did not find.') pass # timeline contains tbl_timeline = self.cur.execute("SELECT * FROM Timeline WHERE Blackspot=0") for entry in tbl_timeline: img = self.MakeThumbnail(os.path.join(self.imgdir, entry[1]), self.thumbsize) self.imageCtrl = wx.StaticBitmap(self.panel3, wx.ID_ANY, wx.BitmapFromImage(img),name=entry[1]) self.imageCtrl.SetBitmap(wx.BitmapFromImage(img)) self.imageCtrl.Bind( wx.EVT_LEFT_DOWN, self.OnLeftClick ) self.imageCtrl.Bind( wx.EVT_LEFT_UP, self.OnLeftRelease ) logging.exception(self.imageCtrl.GetId() ) self.hbox2.Add( self.imageCtrl, 0, wx.ALL, 5 ) self.Layout() self.panel3.SetFocus() self.BindKeys(dbfile) self.hbox2.Layout() self.panel3.Refresh() self.panel3.Update() self.Refresh()
def MakeThumbnail(self, filepath, PhotoMaxSize): img = wx.Image(filepath, wx.BITMAP_TYPE_ANY) # scale image, preserve aspect ratio W = img.GetWidth() H = img.GetHeight() if W > H: NewW = PhotoMaxSize NewH = PhotoMaxSize * H / W else: NewH = PhotoMaxSize NewW = PhotoMaxSize * W / H img = img.Scale(NewW,NewH) imgb = wx.BitmapFromImage(img) return img
def OnLeftClick(self,e): if self.hasSelected: # if selection exists, take badge from previous img = self.MakeThumbnail(os.path.join(self.imgdir, self.selected.GetName() ), self.thumbsize) self.selected.SetBitmap(wx.BitmapFromImage(img) ) if e.GetId() == self.previous: self.hasSelected = True else: self.hasSelected = False
def OnLeftRelease(self,e): self.player.stop() self.brec.SetBitmapLabel(self.brecxicon) self.bplay.SetBitmapLabel(self.bplayicon) if self.hasSelected: #the frame selected was clicked img = self.MakeThumbnail(os.path.join(self.imgdir, self.selected.GetName() ), self.thumbsize) self.selected.SetBitmap(wx.BitmapFromImage(img) ) self.hasSelected = True self.previous = 0 self.player.play() self.viewport.Refresh() self.brec.SetBitmapLabel(self.brecicon) if not self.hasSelected: # we clicked something new # get new selection self.selected = e.GetEventObject() # highlight new selection img = self.MakeThumbnail(os.path.join(self.imgdir, self.selected.GetName() ), self.thumbsize + 3) imgb = wx.BitmapFromImage(img) dc = wx.MemoryDC(imgb) staricon = wx.Image(os.path.join(os.path.dirname(__file__),'..','..','stopgo','images','select.png') ) star = wx.BitmapFromImage(staricon) dc.DrawBitmap(star,133,0) dc.SelectObject(wx.NullBitmap) del dc control = wx.StaticBitmap(self, -1, imgb) self.selected.SetBitmap(imgb) self.hasSelected = True self.previous = self.selected.GetId() #paint canvas img = self.MakeThumbnail(os.path.join( self.imgdir, self.selected.GetName() ), self.screenHeight*.9) self.GetStatusBar().SetStatusText(self.selected.GetName(), 0) self.PaintCanvas(img) self.viewport.Refresh()
def PaintCanvas(self,img): bmp = wx.BitmapFromImage( img ) canvas = wx.StaticBitmap( self.viewport, bitmap=bmp, pos=(0,0) )
def TakeSnapshot(self,e,args): logging.exception('CAPTURE') if self.camset == 1: self.framlog += 1 #print(self.camhero)#DEBUG vidcap = vlc.libvlc_video_take_snapshot(self.player,0,os.path.join(self.imgdir, str(self.framlog).zfill(3)+'.png'),0,0) self.cur.execute('INSERT INTO Timeline VALUES(Null,?,?)', (str(self.framlog).zfill(3)+'.png',0)) # add graphically to timeline img = self.MakeThumbnail(os.path.join(self.imgdir, str(self.framlog).zfill(3)+'.png'), self.thumbsize) self.imageCtrl = wx.StaticBitmap(self.panel3, wx.ID_ANY, wx.BitmapFromImage(img),name=str(self.framlog).zfill(3)+'.png') self.imageCtrl.SetBitmap(wx.BitmapFromImage(img)) self.imageCtrl.Bind( wx.EVT_LEFT_DOWN, self.OnLeftClick ) self.imageCtrl.Bind( wx.EVT_LEFT_UP, self.OnLeftRelease ) logging.exception(self.imageCtrl.GetId() ) self.hbox2.Add( self.imageCtrl, 0, wx.ALL, 5 ) # scroll right 100% to get close to new frame self.panel3.Scroll(self.thumbsize,0) self.Layout() # draw new frame self.hbox2.Layout() self.panel3.Refresh() # scroll WAY right again to show frame self.panel3.Scroll(200,0) # send the shot to onion skin img = os.path.join(self.imgdir, str(self.framlog).zfill(3)+'.png') self.OnionSkin(img) logging.exception(self.framlog) else: dlg = wx.MessageDialog(self, 'Please select your camera first.','',wx.OK | wx.ICON_ERROR) val = dlg.ShowModal() if val == wx.ID_OK: dlg.Destroy() if val == wx.ID_CANCEL: dlg.Destroy() self.player.play() self.brec.SetBitmapLabel(self.brecicon)
def updatelastpic(self, lframe): capsdir = self.capsfolder_box.GetValue() last_pic = str(capsdir + cap_files[lframe]) if os.path.exists(last_pic): last_pic = wx.Image(last_pic, wx.BITMAP_TYPE_ANY) last_pic = self.scale_pic(last_pic, 500) self.last_pic.SetBitmap(wx.BitmapFromImage(last_pic)) lpicdate = self.date_from_fn(cap_files[lframe]) self.lpic_text.SetLabel('Frame ' + str(lframe) + ' - ' + str(lpicdate)) else: self.last_pic.SetBitmap(wx.EmptyBitmap(10,10)) self.fpic_text.SetLabel('end')
def updatefirstpic(self, fframe): capsdir = self.capsfolder_box.GetValue() first_pic = str(capsdir + cap_files[fframe]) if os.path.exists(first_pic): first_pic = wx.Image(first_pic, wx.BITMAP_TYPE_ANY) first_pic = self.scale_pic(first_pic, 500) fpicdate = self.date_from_fn(cap_files[fframe]) self.fpic_text.SetLabel('Frame ' + str(fframe) + ' - ' + str(fpicdate)) self.first_pic.SetBitmap(wx.BitmapFromImage(first_pic)) else: self.first_pic.SetBitmap(wx.EmptyBitmap(10,10)) self.fpic_text.SetLabel('start')
def capture_cam_image(self, e): target_ip = self.tb_ip.GetValue() target_user = self.tb_user.GetValue() target_pass = self.tb_pass.GetValue() cam_capture_choice = self.cam_combo.GetValue() s_val = str(self.tb_s.GetValue()) c_val = str(self.tb_c.GetValue()) g_val = str(self.tb_g.GetValue()) b_val = str(self.tb_b.GetValue()) x_dim = str(self.tb_x.GetValue()) y_dim = str(self.tb_y.GetValue()) cam_select = self.cam_select_cb.GetValue() if cam_capture_choice == 'fswebcam': ctrl_text_string = self.setting_string_tb.GetValue() ctrl_test_value = self.setting_value_tb.GetValue() cmd_str = self.cmds_string_tb.GetValue() if not ctrl_test_value == '': found_login, cam_output, output_file = take_test_image(target_ip, target_user, target_pass, s_val, c_val, g_val, b_val, x_dim, y_dim, cam_select, cam_capture_choice, ctrl_test_value=ctrl_test_value, ctrl_text_string=ctrl_text_string, cmd_str=cmd_str) else: found_login, cam_output, output_file = take_test_image(target_ip, target_user, target_pass, s_val, c_val, g_val, b_val, x_dim, y_dim, cam_select, cam_capture_choice, cmd_str=cmd_str) else: found_login, cam_output, output_file = take_test_image(target_ip, target_user, target_pass, s_val, c_val, g_val, b_val, x_dim, y_dim, cam_select, cam_capture_choice) photo_location = get_test_pic(target_ip, target_user, target_pass, output_file) self.main_image.SetBitmap(wx.BitmapFromImage(wx.Image(photo_location, wx.BITMAP_TYPE_ANY)))
def capture_unset_cam_image(self, e): target_ip = self.tb_ip.GetValue() target_user = self.tb_user.GetValue() target_pass = self.tb_pass.GetValue() x_dim = self.tb_x.GetValue() y_dim = self.tb_y.GetValue() cam_select = self.cam_select_cb.GetValue() extra_args = '' #will be used for camera select cam_capture_choice = self.cam_combo.GetValue() found_login, cam_output, output_file = take_unset_test_image(target_ip, target_user, target_pass, x_dim, y_dim, cam_select, cam_capture_choice) #print cam_output photo_location = get_test_pic(target_ip, target_user, target_pass, output_file) #print photo_location self.main_image.SetBitmap(wx.BitmapFromImage(wx.Image(photo_location, wx.BITMAP_TYPE_ANY)))
def UpdateImage(self, axis, position): object = self.object idx = position - 1 if axis == 1: imagedata = object[idx,:,:] elif axis == 2: imagedata = object[:,idx,:] else: imagedata = object[:,:,idx] imagedata[imagedata < 1e-6] = 1.0 imagedata = numpy.log(imagedata) imagedata = imagedata - imagedata.min() if imagedata.max() > 0: imagedata = (255.0/imagedata.max())*imagedata else: imagedata = 255.0*imagedata imagedatalow = numpy.uint8(imagedata) self.impil = Image.fromarray(imagedatalow, 'L').resize((self.sx,self.sy)) if IsNotWX4(): self.imwx = wx.EmptyImage( self.impil.size[0], self.impil.size[1] ) else: self.imwx = wx.Image( self.impil.size[0], self.impil.size[1] ) self.imwx.SetData( self.impil.convert( 'RGB' ).tobytes() ) if IsNotWX4(): bitmap = wx.BitmapFromImage(self.imwx) else: bitmap = wx.Bitmap(self.imwx) if IsNotWX4(): self.bmp = wx.BitmapFromImage(self.imwx) else: self.bmp = wx.Bitmap(self.imwx) self.image.SetBitmap(bitmap) self.Refresh() self.Layout()
def UpdateImage(self, axis, position): object = self.object idx = position - 1 if axis == 1: imagedata = numpy.array(object[idx,:,:]) elif axis == 2: imagedata = numpy.array(object[:,idx,:]) else: imagedata = numpy.array(object[:,:,idx]) imagedata[imagedata < 1e-6] = 1.0 imagedata = numpy.log(imagedata) imagedata = imagedata - imagedata.min() if imagedata.max() > 0: imagedata = (255.0/imagedata.max())*imagedata else: imagedata = 255.0*imagedata imagedatalow = numpy.uint8(imagedata) self.impil = Image.fromarray(imagedatalow, 'L').resize((self.sx,self.sy)) if IsNotWX4(): self.imwx = wx.EmptyImage( self.impil.size[0], self.impil.size[1] ) else: self.imwx = wx.Image( self.impil.size[0], self.impil.size[1] ) self.imwx.SetData( self.impil.convert( 'RGB' ).tobytes() ) if IsNotWX4(): bitmap = wx.BitmapFromImage(self.imwx) else: bitmap = wx.Bitmap(self.imwx) self.bmp = bitmap self.image.SetBitmap(bitmap) self.Refresh() self.Layout()
def OnSize(self, event): # The Buffer init is done here, to make sure the buffer is always # the same size as the Window Size = self.canvas.GetClientSize() if Size.width <= 0 or Size.height <= 0: return Size.width = max(1, Size.width) Size.height = max(1, Size.height) # Make new offscreen bitmap: this bitmap will always have the # current drawing in it, so it can be used to save the image to # a file, or whatever. #self._Buffer = wx.Bitmap(Size.width, Size.height) if IsNotWX4(): self._img = wx.EmptyImage(Size.width,Size.height) self._Buffer = wx.BitmapFromImage(self._img) else: self._img = wx.Image(Size.width,Size.height) self._Buffer = wx.Bitmap(self._img) self._Buffer.SetHeight(Size.height) self._Buffer.SetWidth(Size.width) self._setSize() self.last_PointLabel = None # reset pointLabel if self.last_draw is None: self.Clear() else: graphics, xSpec, ySpec = self.last_draw self._Draw(graphics, xSpec, ySpec)
def OnPaint( self, event ): dc = wx.BufferedPaintDC( self ) # Draw the camera image if self.Camera.Connected: try: stream = self.Camera.Update() if stream != None: img = wx.ImageFromStream( stream ) bmp = wx.BitmapFromImage( img ) dc.DrawBitmap( bmp, 0, 0, True ) except: pass # If camera not connected draw blank white screen else: dc.SetBrush( wx.WHITE_BRUSH ) dc.DrawRectangle( -1, -1, CAMERA_SIZE_WIDTH, CAMERA_SIZE_HEIGHT ) # Draw the SocketClient match data if self.SocketClient != None: dc.SetTextForeground( HUD_COLOR ) # Clock min = self.SocketClient.MatchTime / 600 sec = int((self.SocketClient.MatchTime -(min * 600)) * .1) dc.DrawText( str(min).rjust(2, "0") + ":" + str(sec).rjust(2, "0"), TIME_POSITION_X, TIME_POSITION_Y ) # Scores for m in xrange(self.SocketClient.NumMechs): dc.DrawText( self.SocketClient.MechNames[m], SCORE_POSITION_X, SCORE_POSITION_Y1+(40*m) ) dc.DrawText( str(self.SocketClient.MechHP[m]), SCORE_POSITION_X, SCORE_POSITION_Y2+(40*m) ) # Draw the crosshairs
def paint(self, ev): dc = wx.PaintDC(ev.GetEventObject()) if self.dirty: dc.Clear() self.dirty = False w = min(self.GetSize()[0], self.img.GetWidth()-self.x) h = min(self.GetSize()[1], self.img.GetHeight()-self.y) bx, by = (0, 0) if self.img.GetWidth() > self.GetSize()[0]: if self.x + self.GetSize()[0] > self.img.GetWidth(): self.x = self.img.GetWidth() - self.GetSize()[0] self.bx = 0 else: bx = int(.5*(self.GetSize()[0] - self.img.GetWidth())) self.x = 0 self.bx = bx if self.img.GetHeight() > self.GetSize()[1]: if self.y + self.GetSize()[1] > self.img.GetHeight(): self.y = self.img.GetHeight() - self.GetSize()[1] self.by = 0 else: by = int(.5*(self.GetSize()[1] - self.img.GetHeight())) self.y = 0 self.by = by # update if within 100px of borders if self.GetParent().GetParent().GetParent().options.get("exprender"): if ((self.x < 100 and self.ax > 0) or (self.y < 100 and self.ay > 0)) or ((self.x + w > 1900) or (self.y + h > 1900)): self.updatebracketimg() sub = wx.Rect(self.x, self.y, w, h) bimg = wx.BitmapFromImage(self.img.GetSubImage(sub)) dc.DrawBitmap(bimg, bx, by) if self.extimg: param0 = wx.BitmapFromImage(piltowx(self.extimg[0])) param1 = self.extimg[1]-self.x+self.bx param2 = self.extimg[2]-self.y+self.by dc.DrawBitmap(param0, param1, param2)
def get_icon(self, text): """ Return a wx icon from a file like object containing the image with text. TODO: transparency support """ background = self.conf.get_color('Look', 'background') foreground = self.conf.get_color('Look', 'color') font = ImageFont.truetype( self.conf.get_font_path(), self.conf.get_int('Look', 'size'), ) if font is None: logger.critical("Font could not be looked up. Try setting " "font_path in the configuration file to the full " "path to a truetype font.") mask = Image.new('RGB', (WIDTH, HEIGHT), background) draw = ImageDraw.Draw(mask) draw.text( background, text, font=font, fill=foreground, ) mask = self.trim(mask) buf = io.StringIO() mask.save(buf, 'png') buf.seek(0) icon = wx.IconFromBitmap( wx.BitmapFromImage( wx.ImageFromStream( buf, wx.BITMAP_TYPE_PNG ) ) ) return icon
def __init__(self, parent, info): wx.Dialog.__init__(self, parent, title="About Bonsu", size=(460,300)) self.SetSizeHints(450,300,-1,-1) self.parent = parent self.info = info self.vboxborder = wx.BoxSizer(wx.VERTICAL) self.vbox = wx.BoxSizer(wx.VERTICAL) self.icon = wx.Image(os.path.join(os.path.dirname(os.path.dirname(__file__)),'image', 'bonsu.ico'), wx.BITMAP_TYPE_ICO) if IsNotWX4(): self.bitmap = wx.BitmapFromImage(self.icon) else: self.bitmap = wx.Bitmap(self.icon) self.staticbmp = wx.StaticBitmap(self, -1, self.bitmap) self.vbox.Add(self.staticbmp, 0, flag=wx.CENTER, border=5) namestr = info.GetName()+" "+info.GetVersion() self.namefont = wx.Font((parent.font.GetPointSize()+8),parent.font.GetFamily(),wx.FONTSTYLE_NORMAL, wx.FONTWEIGHT_BOLD) self.name = wx.StaticText(self, label=namestr) self.name.SetFont(self.namefont) self.vbox.Add((-1, 5)) self.vbox.Add(self.name, 0, flag=wx.CENTER, border=5) self.vbox.Add((-1, 5)) self.description = wx.StaticText(self, label=info.GetDescription(), style=wx.ALIGN_CENTRE_HORIZONTAL) self.description.Wrap(400) self.vbox.Add(self.description, 0, flag=wx.CENTER, border=5) self.vbox.Add((-1, 5)) self.copyright = wx.StaticText(self, label=info.GetCopyright()) self.vbox.Add(self.copyright, 0, flag=wx.CENTER, border=5) self.vbox.Add((-1, 5)) if IsNotWX4(): self.web = wx.StaticText(self, label=info.GetWebSite()[0]) else: self.web = wx.StaticText(self, label=info.GetWebSiteURL()) self.vbox.Add(self.web, 0, flag=wx.CENTER, border=5) self.vbox.Add((-1, 10)) self.hbox = wx.BoxSizer(wx.HORIZONTAL) self.credits =wx.Button(self, label="More") self.Bind(wx.EVT_BUTTON, self.OnCredits, self.credits) self.hbox.Add(self.credits) self.hbox.Add((10, -1)) self.license =wx.Button(self, label="License") self.Bind(wx.EVT_BUTTON, self.OnLicense, self.license) self.hbox.Add(self.license) self.hbox.Add((10, -1)) self.close =wx.Button(self, label="Close") self.Bind(wx.EVT_BUTTON, self.OnClose, self.close) self.hbox.Add(self.close) self.vbox.Add(self.hbox, 0, flag=wx.CENTER, border=5) self.vbox.Add((-1, 10)) self.vboxborder.Add(self.vbox, 1, flag=wx.CENTER|wx.LEFT|wx.RIGHT|wx.TOP|wx.BOTTOM, border=20) self.SetSizer( self.vboxborder ) self.SetAutoLayout(True) self.Fit() self.Layout() self.Show()