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

时间:2011-11-08 20:19:49

标签: python wxpython

我正在尝试将按钮放在列表框下面,但我尝试的所有内容似乎都会扭曲或导致问题。我希望有人能帮助我。

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

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

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()

我不知道如何做到这一点,如果有人能帮助我,那将会非常有用。如果这很简单,请原谅我,但是我已经坚持了好几天。

1 个答案:

答案 0 :(得分:1)

我不确定这是不是你的意思,但是尝试用这个替换你的“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”中。我还将以下比例从零改为1:

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

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