python图形界面开发之wxPython树控件使用方法详解
作者:江之隐 发布时间:2022-05-04 04:39:28
标签: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树控件代码实例
下面用代码实现上图所示的效果:
import wx
# 自定义窗口类MyFrame
class MyFrame(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)
def on_click(self, event):
item = event.GetItem()
self.st.SetLabel(self.tree.GetItemText(item))
def CreateTreeCtrl(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, 'file 1', 1)
tree.AppendItem(item1, 'file 2', 1)
tree.AppendItem(item1, 'file 3', 1)
tree.AppendItem(item1, 'file 4', 1)
tree.AppendItem(item1, 'file 5', 1)
tree.Expand(item1)
# 给item2节点添加5个子节点并展开
tree.AppendItem(item2, 'file 1', 1)
tree.AppendItem(item2, 'file 2', 1)
tree.AppendItem(item2, 'file 3', 1)
tree.AppendItem(item2, 'file 4', 1)
tree.AppendItem(item2, 'file 5', 1)
tree.Expand(item2)
# 返回树对象
return tree
class App(wx.App):
def OnInit(self):
# 创建窗口对象
frame = MyFrame()
frame.Show()
return True
def OnExit(self):
print("应用程序退出")
return 0
if __name__ == '__main__':
app = App()
app.MainLoop()
运行结果
上图的运行结果如下:
来源:https://blog.csdn.net/qq_36728361/article/details/81585134


猜你喜欢
- 一、事件捕捉(Event Capture)的实现问题首先在说这件事前,先感谢一下Realazy。 W3C DOM Level2的事
- 本文实例讲述了go语言实现一个最简单的http文件服务器的方法。分享给大家供大家参考。具体实现方法如下:package mainimport
- 需求分析:python实现一个远程通过网络邮件控制计算机重启或关机的项目。程序流程:过程分析:要实现本功能,首先要直到在本地如何通过Pyth
- MySQL是一个关系型数据库管理系统,由瑞典MySQL AB公司开发,目前属于Oracle公司。MySQL是一种关联数据库管理系统,关联数据
- 修改/etc/my.cnf或者/etc/mysql/my.cnf文件[client]default-character-set = utf8
- 由于本人经常使用笔记本共享WiFi,但是又不想笔记本开机一夜(为了低碳环保嘛 ~_~!),所以每次都要用使用DOS命令关机,感觉好麻烦。正好
- 一、Python解释器 安装Windows平台下载地址 https://www.python.org/ftp/python/3.9.5/py
- 利用 CSS 框架,可以简化你的工作,提高工作效率。CSS 框架是一系列 CSS 文件的集合体,包含了基本的元素重置,页面排版、网格布局、表
- 前言python中有一个非常有用的语法叫做生成器,所利用到的关键字就是yield。有效利用生成器这个工具可以有效地节约系统资源,避免不必要的
- 作为一个合格的开发者,在本地环境下完成开发还远远不够,我们需要把Web App部署到远程服务器上,这样,广大用户才能访问到网站。很多做开发的
- 在python的官方文档中:getattr()的解释如下:getattr(object, name[, default])Return th
- 1.关系模型序列化1.1 什么是序列化?什么是反序列化?序列化的意思是把字典的形式转化成Json格式。当我们展示数据的时候需要使用。反序列化
- 该组件基于技术栈,主要涉及vue-cli生成的webpack项目脚手架,在此脚手架项目基础上完成的,整合了element-ui开源vue的U
- 本文主要是对leveldb进行一个简单的介绍及使用Python语言对其进行操作的代码示例,具体如下。leveldb 是google实现的一种
- 一、简介py2exe是一个将python脚本转换成windows上的可独立执行的可执行程序(*.exe)的工具,这样,你就可以不用装pyth
- 最近在学pytorch,在使用数据分批训练时在导入数据是使用了 DataLoader 在参数 num_workers的设置上使程序出现运行没
- 这篇文章主要介绍了Python csv文件的读写操作实例详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需
- 环境:Anaconda自带的编译器——Spyder最近才开使用conda,发现conda 就是 yyds,爱啦~一、Tensor(张量)im
- Microsoft SQL Server 7.0安全问题Microsoft Corporation【「Microsoft SQL Serve
- 前言:正则表达式(regular expression)描述了一种字符串匹配的规则,正则表达式本身就是一个字符串,使用这个字符串来描述、用来