python图形界面开发之wxPython树控件使用方法详解
wxPython树控件介绍
树(tree)是一种通过层次结构展示信息的控件,如下图所示是树控件示例,左窗口中是树控件,在wxPython中树控件类是wx.TreeCtrl。
wx.TreeCtrl常用的方法有
- AddRoot(text,image=-1,selImage=-1,data=None)。添加根节点,text参数根节点显示的文本;image参数是该节点未被选中时的图片索引,wx.TreeCtrl中使用的图片被放到wx.ImageList图像列表中;selImage参数是该节点被选中时的图片索引。data参数是给节点传递的数据。方法返回节点,节点类型是wx.TreeItemId。
- AppendItem(parent,text,image=-1,selImage=-1,data=None)。添加子节点,parent参数是父节点,其他参数同AddRoot()方法。方法返回值wx.TreeItemId。
- SelectItem(item,select=True)。选中item节点。
- Expand(item)。展开item节点。
- ExpandAll()。展开根节点下的所有子节点。
- ExpandAllChildren(item)。展开item节点下的所有子节点。
- AssignImageList(imageList)。将wx.ImageList图像列表保存到树中,这样就可以在AddRoot()和AppendItem()方法中使用图像列表索引了。
wxPython树控件代码实例
下面用代码实现上图所示的效果:
importwx
#自定义窗口类MyFrame
classMyFrame(wx.Frame):
def__init__(self):
super().__init__(parent=None,title="Tree",size=(500,400))
self.Center()
swindow=wx.SplitterWindow(parent=self,id=-1)
left=wx.Panel(parent=swindow)
right=wx.Panel(parent=swindow)
#设置左右布局的分割窗口left和right
swindow.SplitVertically(left,right,200)
#设置最小窗格大小,左右布局指左边窗口大小
swindow.SetMinimumPaneSize(80)
#创建一棵树
self.tree=self.CreateTreeCtrl(left)
self.Bind(wx.EVT_TREE_SEL_CHANGING,self.on_click,self.tree)
#为left面板设置一个布局管理器
vbox1=wx.BoxSizer(wx.VERTICAL)
left.SetSizer(vbox1)
vbox1.Add(self.tree,1,flag=wx.EXPAND|wx.ALL,border=5)
#为right面板设置一个布局管理器
vbox2=wx.BoxSizer(wx.VERTICAL)
right.SetSizer((vbox2))
self.st=wx.StaticText(right,2,label='右侧面板')
vbox2.Add(self.st,1,flag=wx.EXPAND|wx.ALL,border=5)
defon_click(self,event):
item=event.GetItem()
self.st.SetLabel(self.tree.GetItemText(item))
defCreateTreeCtrl(self,parent):
tree=wx.TreeCtrl(parent)
#通过wx.ImageList()创建一个图像列表imglist并保存在树中
imglist=wx.ImageList(16,16,True,2)
imglist.Add(wx.ArtProvider.GetBitmap(wx.ART_FOLDER,size=wx.Size(16,16)))
imglist.Add(wx.ArtProvider.GetBitmap(wx.ART_NORMAL_FILE,size=(16,16)))
tree.AssignImageList(imglist)
#创建根节点和5个子节点并展开
root=tree.AddRoot('TreeRoot',image=0)
item1=tree.AppendItem(root,'Item1',0)
item2=tree.AppendItem(root,'Item2',0)
item3=tree.AppendItem(root,'Item3',0)
item4=tree.AppendItem(root,'Item4',0)
item5=tree.AppendItem(root,'Item5',0)
tree.Expand(root)
tree.SelectItem(root)
#给item1节点添加5个子节点并展开
tree.AppendItem(item1,'file1',1)
tree.AppendItem(item1,'file2',1)
tree.AppendItem(item1,'file3',1)
tree.AppendItem(item1,'file4',1)
tree.AppendItem(item1,'file5',1)
tree.Expand(item1)
#给item2节点添加5个子节点并展开
tree.AppendItem(item2,'file1',1)
tree.AppendItem(item2,'file2',1)
tree.AppendItem(item2,'file3',1)
tree.AppendItem(item2,'file4',1)
tree.AppendItem(item2,'file5',1)
tree.Expand(item2)
#返回树对象
returntree
classApp(wx.App):
defOnInit(self):
#创建窗口对象
frame=MyFrame()
frame.Show()
returnTrue
defOnExit(self):
print("应用程序退出")
return0
if__name__=='__main__':
app=App()
app.MainLoop()
运行结果
上图的运行结果如下:
更多关于python图形界面开发请查看下面的相关链接
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。