即使在image.Show()之后图像也不会显示

时间:2014-01-22 22:48:49

标签: python wxpython

以下代码。

如果您按原样执行程序(只需将“moresco.jpg”更改为计算机上的任何图像),它将首先显示黑色方块,如果您单击搜索按钮,则硬编码的图像(moresco.jpg在我的情况下)将显示。

我想要的是在启动时隐藏黑色方块,并在点击搜索时显示moresco.jpg。所以我想在那里放一个.Show()。

如果取消注释第22行,黑色方块不显示(这是我们想要的),但是当你点击搜索时,moresco.jpg没有显示。

如果您对如何修复此代码有任何建议,我将不胜感激!

import wx
class gui(wx.Panel):
    def __init__(self,parent):
        self.parent=parent
        wx.Panel.__init__(self,parent)
        vsizer = wx.BoxSizer(wx.VERTICAL)
        hsizer1 = wx.BoxSizer(wx.HORIZONTAL)
        button = wx.Button(self,-1,"search")
        self.Bind( wx.EVT_BUTTON,self.display,button)
        hsizer1.Add(button,.1,wx.EXPAND)
        vsizer.Add(hsizer1,.1,wx.EXPAND)
        hsizer2 = wx.BoxSizer(wx.HORIZONTAL)
        vsizer.Add(hsizer2,1,wx.EXPAND)
        self.pnl=wx.Panel(self)
        img = wx.EmptyImage(500,500)
        self.imageCtrl = wx.StaticBitmap(self.pnl, wx.ID_ANY, 
                                         wx.BitmapFromImage(img))

        # uncomment this line and the image won't show even after
        # click on search button
        #-----------------------------
        # print self.imageCtrl.Hide()
        #-----------------------------

        hsizer3 = wx.BoxSizer(wx.HORIZONTAL)
        hsizer3.Add(self.pnl,2,wx.ALIGN_BOTTOM|wx.ALIGN_CENTER_HORIZONTAL,wx.EXPAND)
        vsizer.Add(hsizer3,2,wx.EXPAND)
        self.SetSizer(vsizer)
        self.pnl.Layout()

    def display(self,strip):
        self.Refresh()
        self.Update()
        self.imageCtrl.Refresh()
        self.imageCtrl.Update()         
        print self.imageCtrl.Show()
        self.imageCtrl.Refresh()
        self.imageCtrl.Update()        
        self.Refresh()
        self.Update()
        imageFile = "moresco.jpg"
        jpg1 = wx.Image(imageFile, wx.BITMAP_TYPE_ANY)
        # bitmap upper left corner is in the position tuple (x, y) = (5, 5)
        self.imageCtrl.SetBitmap(wx.BitmapFromImage(jpg1))
        self.Refresh()
        self.Update()


if __name__ == "__main__":
    app = wx.App()
    w,h=wx.DisplaySize()
    frame = wx.Frame(parent=None, id=-1, title="transmorgripy",size=(w/1.2,h/1.2 ))
    frame.Center()
    panel = gui(frame)

    frame.Show()
    app.MainLoop()

1 个答案:

答案 0 :(得分:2)

在控件上使用Hide()Show()并不是简单地将其设置为透明。当它被隐藏时,它的父面板Sizer中没有位置。显示图像控件后,它需要有机会适合父面板。根据您希望的显示方式,您可能需要拨打FitLayout

要显示图片并触发Sizer给它一个位置,你可以这样做:

def display(self, strip):
    print self.imageCtrl.Show()
    imageFile = "moresco.jpg"
    jpg1 = wx.Image(imageFile, wx.BITMAP_TYPE_ANY)
    # bitmap upper left corner is in the position tuple (x, y) = (5, 5)
    self.imageCtrl.SetBitmap(wx.BitmapFromImage(jpg1))
    self.Layout()