如何在wx python中设置面板的大小

时间:2010-01-04 04:57:09

标签: wxpython

我是wxPython的新手,面对下面给出的问题。

我需要在一个框架内有2个面板。

截至目前,我可以使用box sizer在框架中放置2个面板。在一个面板中我显示了一个图像,在其他面板中我有一些控件,如文本控制或复选框和东西。

但是当我调整框架大小时,面板会大大调整大小。当我调整框架大小时,图像面板变得越来越小,并开始向左手角移动,最终变成左手角上的一个小点。

请运行我的代码,看看调整帧大小时会发生什么。

我需要帮助...

请回复......

感谢。

Damodar

这是我的代码。

import wx

class ImagePanel(wx.Panel):

    def __init__(self,parent,id,title,imagePath):            
        #=========================================================
        # Create a panel
        #=========================================================
        wx.Panel.__init__(self,parent,id,style=wx.BORDER_THEME)

        #==========================================================
        # Display the .png image in the panel
        #==========================================================
        png = wx.Image(imagePath, wx.BITMAP_TYPE_ANY).ConvertToBitmap() 
        wx.StaticBitmap(self, -1, png, (0, 0), (png.GetWidth(),png.GetHeight()))

class ControlPanel(wx.Panel):

    def __init__(self,parent,id,title):
        #=========================================================
        # Create a panel
        #=========================================================
        wx.Panel.__init__(self,parent,id,size=(200,700),style=wx.BORDER_THEME)
        cb1 = wx.CheckBox(self,-1,"Option 1")
        cb2 = wx.CheckBox(self,-1,"Option 2")
        cb3 = wx.CheckBox(self,-1,"Option 3")
        cb4 = wx.CheckBox(self,-1,"Option 4")

        sizer = wx.BoxSizer(wx.VERTICAL)
        sizer.AddSpacer(5,5)
        sizer.Add(cb1)
        sizer.AddSpacer(5,5)
        sizer.Add(cb2)
        sizer.AddSpacer(5,5)
        sizer.Add(cb3)
        sizer.AddSpacer(5,5)
        sizer.Add(cb4)
        sizer.AddSpacer(5,5)            
        self.SetSizer(sizer)

        #==========================================================
        # Shows the text control in the panel
        #==========================================================
        #wx.TextCtrl(self,-1,"This is a multiline text editor.")

app = wx.PySimpleApp()
frame = wx.Frame(None,-1,"Main Frame",size=(900,700),
             style=wx.DEFAULT_FRAME_STYLE | wx.FULL_REPAINT_ON_RESIZE)
box = wx.BoxSizer(wx.HORIZONTAL)
box.Add(ImagePanel(frame,1,"Panel A","Artifacts_vs_Elaborations_36855.png"))
box.AddSpacer(5,5)
box.Add(ControlPanel(frame,2,"Panel B"))
frame.SetSizer(box)
frame.Show(1)
app.MainLoop()

1 个答案:

答案 0 :(得分:0)

我已经弄清楚我的代码出了什么问题。我没有处理resize事件,即EVT_RESIZE。现在工作正常。

由于

Damodar