在wxpython的列表框下放置按钮?

在wxpython的列表框下放置按钮?,python,wxpython,Python,Wxpython,我试着把按钮放在列表框下面,但我尝试的一切似乎都扭曲了或引起了问题。我希望有人能帮助我 我想在列表框下面放两个按钮,它们应该总是根据窗口的大小改变位置(这样它就不会消失),基本上当你调整应用程序窗口的大小时,它应该改变按钮的位置 这是我到目前为止所拥有的 things_inlistbox=[] things2_listbox=[] things3listbox=[] things4listbox=[] import wx def areachange(self,pg): print pg

我试着把按钮放在列表框下面,但我尝试的一切似乎都扭曲了或引起了问题。我希望有人能帮助我

我想在列表框下面放两个按钮,它们应该总是根据窗口的大小改变位置(这样它就不会消失),基本上当你调整应用程序窗口的大小时,它应该改变按钮的位置

这是我到目前为止所拥有的

things_inlistbox=[]
things2_listbox=[]
things3listbox=[]
things4listbox=[]
import wx
def areachange(self,pg):
    print pg
    if pg=="Things":
        self.Things_area.Show()
    else:
        self.Things_area.Hide()

class things1tab(wx.Panel):
    def newAddImage(self,parent):
        things2_listbox.append('hi');
        self.listBox.Set(things2_listbox)
        self.listBox.SetSelection(len(things2_listbox)-1)
    def reName(self,parent):
        sel = self.listBox.GetSelection()
        text = self.listBox.GetString(sel)
        renamed = wx.GetTextFromUser('Rename item', 'Rename dialog', text)
        if renamed != '':
            things2_listbox.pop(sel)
            things2_listbox.insert(sel,renamed)
            self.listBox.Set(things2_listbox)
            self.listBox.SetSelection(sel)
    def __init__(self, parent):
        wx.Panel.__init__(self, parent)
        self.listBox = wx.ListBox(self, size=(200, -1), choices=things2_listbox, style=wx.LB_SINGLE)
        self.sizer = wx.BoxSizer()
        self.sizerMain = wx.BoxSizer()
        self.listBox.Bind(wx.EVT_LISTBOX_DCLICK, self.reName)

        self.sizer.Add(self.listBox, proportion=0, flag=wx.TOP | wx.EXPAND | wx.LEFT, border=5)
        self.sizerMain.Add(self.sizer, proportion=0, flag=wx.BOTTOM | wx.EXPAND, border=70)
        self.SetSizer(self.sizerMain)
class imageArea(wx.Frame):
    def __init__(self, parent):
        wx.Frame.__init__(self, parent)
        wx.StaticBox(self, -1, 'Personal Info', (400, 5), size=(240, 170))
        self.quote = wx.StaticText(self, label="Your quote :", pos=(20, 30), size=(200, -1))
        self.Show()

        self.SetSizer(self.sizerMain)
class things2tab(wx.Panel):
    def __init__(self, parent):
        wx.Panel.__init__(self, parent)
        t = wx.StaticText(self, -1, "This is a PageTwo object", (40,40))

class things3tab(wx.Panel):
    def __init__(self, parent):
        wx.Panel.__init__(self, parent)
        t = wx.StaticText(self, -1, "This is a PageThree object", (60,60))

class things4tab(wx.Panel):
    def __init__(self, parent):
        wx.Panel.__init__(self, parent)
        t = wx.StaticText(self, -1, "This is a PageThree object", (400,60))

class MyNotebook(wx.Notebook):
    def __init__(self, *args, **kwargs):
        wx.Notebook.__init__(self, *args, **kwargs)

class MyPanel(wx.Panel):
    def OnPageChanged(self, event):
        new = event.GetSelection()
        areachange(self,self.notebook.GetPageText(new))
        event.Skip()

    def OnPageChanging(self, event):
        event.Skip()
    def __init__(self, *args, **kwargs):
        wx.Panel.__init__(self, *args, **kwargs)
        self.notebook = MyNotebook(self, size=(225, -1))
#        self.button = wx.Button(self, label="Something else here? Maybe!")
        tab_Things = things1tab(self.notebook)
        tab_Things2 = things2tab(self.notebook)
        tab_Things3 = things3tab(self.notebook)
        tab_Things4 = things4tab(self.notebook)

        # add the pages to the notebook with the label to show on the tab
        self.notebook.AddPage(tab_Things, "Things",select=True)
        self.notebook.AddPage(tab_Things2, "Things2")
        self.notebook.AddPage(tab_Things3, "Things3")
        self.notebook.AddPage(tab_Things4, "Things4")
        self.Things_area=wx.StaticText(self, -1, "This is a PageOne object", (300,240))
        self.sizer = wx.BoxSizer()
        self.sizer.Add(self.notebook, proportion=0, flag=wx.EXPAND)
#        self.sizer.Add(self.button, proportion=0)
        self.SetSizer(self.sizer)
        self.notebook.Bind(wx.EVT_NOTEBOOK_PAGE_CHANGED, self.OnPageChanged)
        self.notebook.Bind(wx.EVT_NOTEBOOK_PAGE_CHANGING, self.OnPageChanging)
        areachange(self,self.notebook.GetPageText(0))        


class MainWindow(wx.Frame):
    def __init__(self, *args, **kwargs):
        wx.Frame.__init__(self, *args, **kwargs)
        self.panel = MyPanel(self)

        self.Show()


app = wx.App(False)
win = MainWindow(None, size=(600, 400))
app.MainLoop()

我不知道如何做到这一点,如果有人能帮助我,我将不胜感激。如果这是一个简单的问题,请原谅我,但是我已经坚持了好几天了。

我不确定这是否是你的意思,但是尝试用这个替换你的“things1tab”代码,看看它是否有效:

class things1tab(wx.Panel):
    def newAddImage(self,parent):
        things2_listbox.append('hi');
        self.listBox.Set(things2_listbox)
        self.listBox.SetSelection(len(things2_listbox)-1)
    def reName(self,parent):
        sel = self.listBox.GetSelection()
        text = self.listBox.GetString(sel)
        renamed = wx.GetTextFromUser('Rename item', 'Rename dialog', text)
        if renamed != '':
            things2_listbox.pop(sel)
            things2_listbox.insert(sel,renamed)
            self.listBox.Set(things2_listbox)
            self.listBox.SetSelection(sel)
    def __init__(self, parent):
        wx.Panel.__init__(self, parent)
        self.listBox = wx.ListBox(self, size=(200, -1), choices=things2_listbox, style=wx.LB_SINGLE)
        self.sizer = wx.BoxSizer(wx.VERTICAL)
        btnSizer = wx.BoxSizer(wx.HORIZONTAL)
        self.sizerMain = wx.BoxSizer()
        self.listBox.Bind(wx.EVT_LISTBOX_DCLICK, self.reName)
        btn = wx.Button(self, label="Test")
        btnTwo = wx.Button(self, label="Test 2")

        self.sizer.Add(self.listBox, proportion=1, flag=wx.TOP | wx.EXPAND | wx.LEFT, border=5)
        btnSizer.Add(btn, 0, wx.ALL, 5)
        btnSizer.Add(btnTwo, 0, wx.ALL, 5)
        self.sizer.Add(btnSizer)
        self.sizerMain.Add(self.sizer, proportion=0, flag=wx.BOTTOM | wx.EXPAND, border=70)
        self.SetSizer(self.sizerMain)
我所做的只是创建一个按钮大小调整器,添加两个按钮并将其嵌套在“self.sizer”中。我还将以下比例从0更改为1:

self.sizer.Add(self.listBox, proportion=1, flag=wx.TOP | wx.EXPAND | wx.LEFT, border=5)

希望这能帮助你走得更远。

我不确定这是否是你的意思,但试着用这个替换你的“things1tab”代码,看看它是否有效:

class things1tab(wx.Panel):
    def newAddImage(self,parent):
        things2_listbox.append('hi');
        self.listBox.Set(things2_listbox)
        self.listBox.SetSelection(len(things2_listbox)-1)
    def reName(self,parent):
        sel = self.listBox.GetSelection()
        text = self.listBox.GetString(sel)
        renamed = wx.GetTextFromUser('Rename item', 'Rename dialog', text)
        if renamed != '':
            things2_listbox.pop(sel)
            things2_listbox.insert(sel,renamed)
            self.listBox.Set(things2_listbox)
            self.listBox.SetSelection(sel)
    def __init__(self, parent):
        wx.Panel.__init__(self, parent)
        self.listBox = wx.ListBox(self, size=(200, -1), choices=things2_listbox, style=wx.LB_SINGLE)
        self.sizer = wx.BoxSizer(wx.VERTICAL)
        btnSizer = wx.BoxSizer(wx.HORIZONTAL)
        self.sizerMain = wx.BoxSizer()
        self.listBox.Bind(wx.EVT_LISTBOX_DCLICK, self.reName)
        btn = wx.Button(self, label="Test")
        btnTwo = wx.Button(self, label="Test 2")

        self.sizer.Add(self.listBox, proportion=1, flag=wx.TOP | wx.EXPAND | wx.LEFT, border=5)
        btnSizer.Add(btn, 0, wx.ALL, 5)
        btnSizer.Add(btnTwo, 0, wx.ALL, 5)
        self.sizer.Add(btnSizer)
        self.sizerMain.Add(self.sizer, proportion=0, flag=wx.BOTTOM | wx.EXPAND, border=70)
        self.SetSizer(self.sizerMain)
我所做的只是创建一个按钮大小调整器,添加两个按钮并将其嵌套在“self.sizer”中。我还将以下比例从0更改为1:

self.sizer.Add(self.listBox, proportion=1, flag=wx.TOP | wx.EXPAND | wx.LEFT, border=5)

希望这能帮助你走得更远。

你可能也会发现小部件检查工具很方便:我在sizers上有很多问题wxPython Wiki上有几个sizers教程你可能也会发现小部件检查工具很方便:我在sizers上有很多问题wxPython上有几个sizers教程维基