wxpython:玉米中的小方形面板

2024-10-02 02:36:37 发布

您现在位置:Python中文网/ 问答频道 /正文

Iam试图在另一个面板(panel1)的右下角放置一个小的方形面板(panel2)。

panel1应该填充整个框架,并在调整框架大小时展开,但是squarepanel(panel2)应该保持不变,不进行扩展或调整大小。

像这样:

enter image description here

我想我错过了一件小事,但我就是不知道该怎么办。方形面板随panel1一起展开,我不希望发生这种情况。

下面是我的简化代码:

import wx

class MyFrame(wx.Frame):
    def __init__(self, parent, id, title):
        wx.Frame.__init__(self, parent, id, title,size=(250, 250))

        #topPanel = wx.Panel(self)

        panel1 = wx.Panel(self, -1)
        panel2 = wx.Panel(panel1, -1, size = (100,100))
        panel2.SetBackgroundColour('gray')
        s = wx.BoxSizer(wx.VERTICAL)
        s.Add(panel2,1, wx.ALIGN_RIGHT | wx.ALIGN_BOTTOM)
        panel1.SetSizer(s)
        sizer = wx.BoxSizer(wx.VERTICAL)
        sizer.Add(panel1,1,flag = wx.EXPAND)
        self.SetSizer(sizer)

class MyApp(wx.App):
     def OnInit(self):
         frame = MyFrame(None, -1, 'frame')
         frame.Show(True)
         return True

app = MyApp(0)
app.MainLoop()

Tags: self框架面板initdefframeclasswx
2条回答

请尝试以下代码:

import wx
class MyFrame(wx.Frame):
    def __init__(self, parent, id, title):
        wx.Frame.__init__(self, parent, id, title,size=(250, 250))
        panel1 = wx.Panel(self, -1)
        panel1.SetTransparent(100)
        panel2 = wx.Panel(panel1, -1,pos=(200,180), size = (40,40))
        panel2.SetBackgroundColour('gray')
        s = wx.BoxSizer(wx.HORIZONTAL)
        s.Add(panel1,1, wx.ALIGN_RIGHT | wx.ALIGN_BOTTOM)
        panel1.SetSizer(s)
        sizer = wx.BoxSizer(wx.HORIZONTAL)
        sizer.Add(panel2,1,wx.EXPAND)
        panel2.SetSizer(sizer)

class MyApp(wx.App):
    def OnInit(self):
        frame = MyFrame(None, -1, 'frame')
        frame.Show(True)
        return True

app = MyApp(0)
app.MainLoop()

这实际上是相当微不足道的。你只需要用两个盒子大小就可以得到你想要的效果。参见以下代码:

import wx

########################################################################
class SmallPanel(wx.Panel):
    """"""

    #                                   
    def __init__(self, parent):
        """Constructor"""
        wx.Panel.__init__(self, parent, size=(50,50))
        self.SetBackgroundColour("red")


########################################################################
class MainPanel(wx.Panel):
    """"""

    #                                   
    def __init__(self, parent):
        """Constructor"""
        wx.Panel.__init__(self, parent)

        top_sizer = wx.BoxSizer(wx.VERTICAL)
        h_sizer = wx.BoxSizer(wx.HORIZONTAL)

        top_sizer.AddStretchSpacer(prop=1)

        mini_panel = SmallPanel(self)

        h_sizer.AddStretchSpacer(prop=1)
        h_sizer.Add(mini_panel, 0, wx.ALL, 5)
        top_sizer.Add(h_sizer, 0, wx.EXPAND)
        self.SetSizer(top_sizer)


########################################################################
class MainFrame(wx.Frame):
    """"""

    #                                   
    def __init__(self):
        """Constructor"""
        wx.Frame.__init__(self, None, title="Panels")
        panel = MainPanel(self)
        self.Show()

if __name__ == '__main__':
    app = wx.App(False)
    frame = MainFrame()
    app.MainLoop()

如果运行此代码,应该会看到如下所示:

enter image description here

相关问题 更多 >

    热门问题