面板之间的元素未在siz内对齐

2024-07-05 11:45:11 发布

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

我有两个面板,我都是添加到一个单一的大小在顶层,但这些面板内的元素没有相互对齐。你知道吗

下面是一个简单的例子来说明我正在努力实现的目标。你知道吗

import wx

class MyPanel(wx.Panel):
    def __init__(self, parent):
        super(MyPanel, self).__init__(parent=parent)
        mygridsizer = wx.GridBagSizer()    

        sizer = wx.BoxSizer(orient=wx.HORIZONTAL)
        sizer.Add(wx.StaticText(self,label="Hello world"))
        sizer.Add(wx.Button(self, label="hello"))
        mygridsizer.Add(sizer, pos=(0,0))
        mygridsizer.Add(wx.ComboBox(self), pos=(0,1))
        self.SetSizer(mygridsizer)

class MyPanel2(wx.Panel):
    def __init__(self, parent):
        super(MyPanel2, self).__init__(parent=parent)
        sizer = wx.BoxSizer(orient=wx.HORIZONTAL)
        sizer.Add(wx.Button(self, label="non-aligned button"))
        self.SetSizer(sizer)

class MainFrame(wx.Frame):
    def __init__(self, parent):
        super(MainFrame, self).__init__(None)
        sizer = wx.GridSizer(3, 1)
        panel1 = MyPanel(parent=self)
        panel2 = MyPanel2(parent=self)
        sizer.Add(panel1)
        sizer.Add(panel2)
        self.SetSizer(sizer)

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

在上面的示例中,如何对齐两个面板的按钮?你知道吗


Tags: selfadd面板initdeflabelclassparent
1条回答
网友
1楼 · 发布于 2024-07-05 11:45:11

问题是大小调整器正在对齐面板,如果要对齐按钮,则应使它们成为同一大小调整器的一部分(而不是具有自己大小调整器的两个面板的一部分)。您也可以这样做以快速破解(实际上是添加与文本大小相同的间隔符):

import wx

class MyPanel(wx.Panel):
    def __init__(self, parent):
        super(MyPanel, self).__init__(parent=parent)
        mygridsizer = wx.GridBagSizer()    

        sizer = wx.BoxSizer(orient=wx.HORIZONTAL)
        sizer.Add(wx.StaticText(self,label="Hello world"))
        sizer.Add(wx.Button(self, label="hello"))
        mygridsizer.Add(sizer, pos=(0,0))
        mygridsizer.Add(wx.ComboBox(self), pos=(0,1))
        self.SetSizer(mygridsizer)

class MyPanel2(wx.Panel):
    def __init__(self, parent):
        super(MyPanel2, self).__init__(parent=parent)
        sizer = wx.BoxSizer(orient=wx.HORIZONTAL)
        t = wx.StaticText(self,label="Hello world")
        t.Hide()
        t.GetSize()
        sizer.Add(t.GetSize())
        sizer.Add(wx.Button(self, label="non-aligned button"))
        self.SetSizer(sizer)

class MainFrame(wx.Frame):
    def __init__(self, parent):
        super(MainFrame, self).__init__(None)
        sizer = wx.GridSizer(3, 1)
        panel1 = MyPanel(parent=self)
        panel2 = MyPanel2(parent=self)
        sizer.Add(panel1)
        sizer.Add(panel2)
        self.SetSizer(sizer)

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

相关问题 更多 >