python图形界面开发之wxPython树控件使用方法详解


Posted in Python onFebruary 24, 2020

wxPython树控件介绍

树(tree)是一种通过层次结构展示信息的控件,如下图所示是树控件示例,左窗口中是树控件,在wxPython中树控件类是wx.TreeCtrl。

python图形界面开发之wxPython树控件使用方法详解

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

运行结果

上图的运行结果如下:

python图形界面开发之wxPython树控件使用方法详解

更多关于python图形界面开发请查看下面的相关链接

Python 相关文章推荐
python使用ctypes模块调用windowsapi获取系统版本示例
Apr 17 Python
python numpy 部分排序 寻找最大的前几个数的方法
Jun 27 Python
用Python分析3天破10亿的《我不是药神》到底神在哪?
Jul 12 Python
Python并行分布式框架Celery详解
Oct 15 Python
python正向最大匹配分词和逆向最大匹配分词的实例
Nov 14 Python
python选取特定列 pandas iloc,loc,icol的使用详解(列切片及行切片)
Aug 06 Python
python3.6、opencv安装环境搭建过程(图文教程)
Nov 05 Python
简单了解python装饰器原理及使用方法
Dec 18 Python
5行Python代码实现图像分割的步骤详解
May 25 Python
keras自动编码器实现系列之卷积自动编码器操作
Jul 03 Python
python中Django文件上传方法详解
Aug 05 Python
如何用Python和JS实现的Web SSH工具
Feb 23 Python
pytorch使用tensorboardX进行loss可视化实例
Feb 24 #Python
python绘制动态曲线教程
Feb 24 #Python
Python 字符串处理特殊空格\xc2\xa0\t\n Non-breaking space
Feb 23 #Python
Windows系统下pycharm中的pip换源
Feb 23 #Python
推荐8款常用的Python GUI图形界面开发框架
Feb 23 #Python
PyQt5高级界面控件之QTableWidget的具体使用方法
Feb 23 #Python
PyQt5中QTableWidget如何弹出菜单的示例代码
Feb 23 #Python
You might like
PHP5各个版本的新功能和新特性总结
2014/03/16 PHP
分享10段PHP常用代码
2015/11/11 PHP
PHP单例模式详解及实例代码
2016/12/21 PHP
PHP 中常量的知识整理
2017/04/14 PHP
phpStudy2016 配置多个域名期间遇到的问题小结
2017/10/19 PHP
PHP工厂模式、单例模式与注册树模式实例详解
2019/06/03 PHP
PHPstorm激活码2020年5月13日亲测有效
2020/09/17 PHP
javascript实现的基于金山词霸网络翻译的代码
2010/01/15 Javascript
字符串的replace方法应用浅析
2011/12/06 Javascript
javascript返回顶部效果(自写代码)
2013/01/06 Javascript
Tab切换组件(选项卡功能)实例代码
2013/11/21 Javascript
利用jQuary实现文字浮动提示效果示例代码
2013/12/26 Javascript
JavaScript Window浏览器对象模型方法与属性汇总
2015/04/20 Javascript
javascript实现查找数组中最大值方法汇总
2016/02/13 Javascript
jQuery代码性能优化的10种方法
2016/06/21 Javascript
微信小程序 PHP后端form表单提交实例详解
2017/01/12 Javascript
微信小程序左右滑动切换页面详解及实例代码
2017/02/28 Javascript
js获取当前周、上一周、下一周日期
2017/03/19 Javascript
实例学习JavaScript读取和写入cookie
2018/01/29 Javascript
Vue2.0中集成UEditor富文本编辑器的方法
2018/03/03 Javascript
深入浅析Vue中的slots/scoped slots
2018/04/03 Javascript
利用npm 安装删除模块的方法
2018/05/15 Javascript
使用layui 渲染table数据表格的实例代码
2018/08/19 Javascript
Python脚本实现自动发带图的微博
2016/04/27 Python
python append、extend与insert的区别
2016/10/13 Python
Python paramiko模块的使用示例
2018/04/11 Python
解决django中ModelForm多表单组合的问题
2019/07/18 Python
Python集成开发工具Pycharm的安装和使用详解
2020/03/18 Python
Python实现读取并写入Excel文件过程解析
2020/05/27 Python
巴黎卡诗美国官方网站:始于1964年的头发头皮护理专家
2017/07/10 全球购物
经济系大学生求职信
2013/10/01 职场文书
农村面貌改造提升实施方案
2014/03/18 职场文书
学术研讨会欢迎词
2015/01/26 职场文书
跑出一片天观后感
2015/06/08 职场文书
Python实战实现爬取天气数据并完成可视化分析详解
2022/06/16 Python
GPU服务器的多用户配置方法
2022/07/07 Servers