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 相关文章推荐
Python3基础之基本运算符概述
Aug 13 Python
Python基于列表list实现的CRUD操作功能示例
Jan 05 Python
python队列queue模块详解
Apr 27 Python
pandas使用get_dummies进行one-hot编码的方法
Jul 10 Python
python查询文件夹下excel的sheet名代码实例
Apr 02 Python
Django 表单模型选择框如何使用分组
May 16 Python
Python递归函数特点及原理解析
Mar 04 Python
python爬虫开发之urllib模块详细使用方法与实例全解
Mar 09 Python
python求前n个阶乘的和实例
Apr 02 Python
Python sql注入 过滤字符串的非法字符实例
Apr 03 Python
Python容器类型公共方法总结
Aug 19 Python
据Python爬虫不靠谱预测可知今年双十一销售额将超过6000亿元
Nov 11 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
浅谈Eclipse PDT调试PHP程序
2014/06/09 PHP
PHP源码分析之变量的存储过程分解
2014/07/03 PHP
又一个PHP实现的冒泡排序算法分享
2014/08/21 PHP
关于实现代码语法标亮 dp.SyntaxHighlighter
2007/02/02 Javascript
JavaScript支持的最大递归调用次数分析
2014/06/24 Javascript
js获取checkbox值的方法
2015/01/28 Javascript
jquery.zclip轻量级复制失效问题
2017/01/08 Javascript
nodejs简单读写excel内容的方法示例
2018/03/16 NodeJs
记一次vue-webpack项目优化实践详解
2019/02/17 Javascript
js Array.slice的8种不同用法示例
2019/07/10 Javascript
jquery 回调操作实例分析【回调成功与回调失败的情况】
2019/09/27 jQuery
Node.js创建一个Express服务的方法详解
2020/01/06 Javascript
python str与repr的区别
2013/03/23 Python
Python实现的双色球生成功能示例
2017/12/18 Python
浅谈Tensorflow模型的保存与恢复加载
2018/04/26 Python
python实现zabbix发送短信脚本
2018/09/17 Python
python程序变成软件的实操方法
2019/06/24 Python
python zip()函数使用方法解析
2019/10/31 Python
Python 文件数据读写的具体实现
2020/01/24 Python
Python实现扫码工具的示例代码
2020/10/09 Python
Python环境配置实现pip加速过程解析
2020/11/27 Python
英国鲜花速递:Serenata Flowers
2018/04/03 全球购物
介绍一下gcc特性
2015/10/31 面试题
自荐信包含哪些内容
2013/10/30 职场文书
门卫班长岗位职责
2013/12/15 职场文书
抄作业检讨书
2014/02/17 职场文书
金融事务专业毕业生求职信
2014/02/23 职场文书
给校长的一封建议书
2014/03/12 职场文书
奥利奥广告词
2014/03/20 职场文书
公民代理授权委托书
2014/09/24 职场文书
2014年高中生自我评价范文
2014/09/26 职场文书
离婚协议书怎么写(范本参考)
2014/09/30 职场文书
见习报告的格式
2014/10/31 职场文书
公积金贷款承诺书
2015/04/30 职场文书
Python趣味挑战之用pygame实现简单的金币旋转效果
2021/05/31 Python
新手入门Mysql--概念
2021/06/18 MySQL