1

我有一个 WxWidgets 应用程序。我正在使用 Python。该应用程序有一个主框架、一个菜单栏、一个底部的状态栏,对于中间的主要内容,我想要一个渐变色面板来提供漂亮的背景阴影效果。我有这个工作,但我现在想开始将我的 GUI 小部件添加到面板(例如一组静态文本标签和编辑框)。如何将这些添加到面板中,以便它们显示在面板顶部?在下面的示例代码中,将文本字段添加到面板会导致面板折叠成小尺寸。

谢谢你的帮助。

def createGui(self, parent, title):
    wx.Frame.__init__(self, parent, title=title, style=wx.DEFAULT_FRAME_STYLE ^ wx.RESIZE_BORDER)
    self.SetBackgroundColour("white")
    self.SetSizeHints(800, 640, 800, 600)
    self.sizer = wx.BoxSizer(wx.VERTICAL)
    self.panel = wx.Panel(self, size=(800, 600))
    self.sizer.Add(self.panel)
    self.panel.Bind(wx.EVT_PAINT, self.on_paint)

    self.label1 = wx.StaticText(self, -1, "PV Power" , wx.Point(1, 1))
    # This next part is not working, I want to add static text at certain geometric locations to the panel, so I get to see
    # the panel with it's background gradient and the text labels on top
    #self.panel.AddChild(self.label1)

    menubar = wx.MenuBar()
    fileMenu = wx.Menu()
    fitem = fileMenu.Append(wx.ID_EXIT, 'Quit', 'Quit application')
    menubar.Append(fileMenu, '&File')
    self.SetMenuBar(menubar)

    self.Bind(wx.EVT_MENU, self.onQuit, fitem)

    # Create a box at the bottom for buttons
    self.statusbar = self.CreateStatusBar()
    self.statusbar.SetStatusText('Waiting to run')
    self.sizer.Add(self.statusbar)

    self.SetSizer(self.sizer)
    self.SetAutoLayout(1)
    self.sizer.Fit(self)
    self.Show()

def on_paint(self, event):
    dc = wx.PaintDC(self.panel)
    x = 0
    y = 0
    w, h = self.GetSize()
    dc.GradientFillLinear((x, y, w, h), 'white', 'light grey')
4

1 回答 1

1

从你的问题听起来你需要做的就是

self.panel.SetMinSize((800,600))

在您创建面板之后,不幸的是,对 wxStaticText 的限制会引起很多头痛(它将有一个白色背景(或至少是彩色的))您可以做一些技巧来将文本的背景设置为一个区域基本上模仿背景透明度的图像......但它们很痛苦

于 2013-10-19T21:37:49.230 回答