日常使用wxpython中,想显示多方面的内容,又不想要弹出这么多的窗口,于是想到了弄成一个大窗口,再将其分割成多个部分。
首先介绍的是窗口的分割
splitter = wx.SplitterWindow(self, -1)
#分成左面板和右面板
leftpanel = wx.Panel(splitter)
rightpanel = wx.Panel(splitter)
#100位左面板的尺寸
splitter.SplitVertically(leftpanel, rightpanel, 100)
#若想上下分割使用 SplitHorizontally
#设置左(上)面板最小值
splitter.SetMinimumPaneSize(80)
rightpanel.SetBackgroundColour(wx.Colour(200, 200, 200))
随后我们向左右panel添加部件即可。
若想分更多的窗口,在已分割的窗口基础上再次进行分割即可。
随后是滚动条的设置,为右窗口添加一个滚动条。
vbox2 = wx.BoxSizer(wx.VERTICAL)
self.scroller = wx.ScrolledWindow(rightpanel, -1)
self.scroller.SetScrollbars(1, 1, 50, 300) #是否横向|竖向滚动条,小于该长度时出现滚动条
self.scroller.SetScrollRate(0, 20) #滚动速度
self.pnl = wx.Panel(self.scroller)
self.ms = wx.BoxSizer(wx.VERTICAL)
a=wx.StaticText(self.pnl,-1,'sadqwe\ndsad')
self.ms.Add(a ,0, wx.ALL | wx.CENTER, 5)
b = wx.StaticText(self.pnl, -1, 'dadqwe\ndsad')
self.ms.Add(b, 1, wx.ALL | wx.CENTER, 5)
# self.SetMinSize((300, 640)) #设置窗口的最小尺寸
c = wx.Button(self.pnl, -1, 'dad')
self.ms.Add(c, 1, wx.ALL | wx.CENTER, 5)
self.pnl.SetSizerAndFit(self.ms)
c.Bind(wx.EVT_BUTTON,self.dd)
self.ms.Fit(rightpanel)
vbox2.Add(self.scroller, 1, flag=wx.ALL | wx.EXPAND, border=5)
rightpanel.SetSizer(vbox2)
以下是全代码
import wx
class MsgWindow(wx.Frame):
def __init__(self, parent, id, title):
wx.Frame.__init__(self, parent, id, title, pos=(640, 0))
splitter = wx.SplitterWindow(self, -1)
#分成左面板和右面板
self.leftpanel = wx.Panel(splitter)
rightpanel = wx.Panel(splitter)
#100位左面板的尺寸
splitter.SplitVertically(self.leftpanel, rightpanel, 100)
#设置面板最小值
splitter.SetMinimumPaneSize(80)
rightpanel.SetBackgroundColour(wx.Colour(200, 200, 200))
vbox2 = wx.BoxSizer(wx.VERTICAL)
self.scroller = wx.ScrolledWindow(rightpanel, -1)
self.scroller.SetScrollbars(1, 1, 50, 300) #是否横向|竖向滚动条,小于该长度时出现滚动条
self.scroller.SetScrollRate(0, 20) #滚动速度
self.pnl = wx.Panel(self.scroller)
self.ms = wx.BoxSizer(wx.VERTICAL)
a=wx.StaticText(self.pnl,-1,'sadqwe\ndsad')
self.ms.Add(a ,0, wx.ALL | wx.CENTER, 5)
b = wx.StaticText(self.pnl, -1, 'dadqwe\ndsad')
self.ms.Add(b, 1, wx.ALL | wx.CENTER, 5)
# self.SetMinSize((300, 640))
c = wx.Button(self.pnl, -1, 'dad')
self.ms.Add(c, 1, wx.ALL | wx.CENTER, 5)
self.pnl.SetSizerAndFit(self.ms)
c.Bind(wx.EVT_BUTTON,self.dd)
self.ms.Fit(rightpanel)
vbox2.Add(self.scroller, 1, flag=wx.ALL | wx.EXPAND, border=5)
rightpanel.SetSizer(vbox2)
list2 = ['苹果', '橘子', '香蕉']
# 设置列表
lb2 = wx.ListBox(self.leftpanel, -1, choices=list2, style=wx.LB_SINGLE)
# self.Bind(wx.EVT_LISTBOX, self.on_listbox, lb2)
# 在左面板放个列表
vbox1 = wx.BoxSizer(wx.VERTICAL)
vbox1.Add(lb2, 1, flag=wx.ALL | wx.EXPAND, border=5)
self.leftpanel.SetSizer(vbox1)
def dd(self,e):
self.leftpanel.Refresh()
if __name__ == '__main__':
app = wx.App(redirect=False)
msg_win = MsgWindow(None, -1, u'消息')
msg_win.Show(True)
app.MainLoop()