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编程中基本的数学计算使用
Feb 04 Python
python3实现UDP协议的服务器和客户端
Jun 14 Python
python itchat实现微信自动回复的示例代码
Aug 14 Python
Python简单生成随机姓名的方法示例
Dec 27 Python
使用pandas对两个dataframe进行join的实例
Jun 08 Python
详解Python的三种可变参数
May 08 Python
Django用户认证系统 User对象解析
Aug 02 Python
如何基于Python制作有道翻译小工具
Dec 16 Python
pyinstaller打包找不到文件的问题解决
Apr 15 Python
keras中epoch,batch,loss,val_loss用法说明
Jul 02 Python
Python中正则表达式对单个字符,多个字符和匹配边界等使用
Jan 27 Python
Python re.sub 反向引用的实现
Jul 07 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
PHP中echo和print的区别
2014/08/28 PHP
Yii净化器CHtmlPurifier用法示例(过滤不良代码)
2016/07/15 PHP
支付宝服务窗API接口开发php版本
2016/07/20 PHP
PHP abstract 抽象类定义与用法示例
2018/05/29 PHP
javascript实现依次输入input自动定焦
2014/12/23 Javascript
Bootstrap轮播插件中图片变形的终极解决方案 使用jqthumb.js
2016/07/10 Javascript
Bootstrap基本插件学习笔记之模态对话框(16)
2016/12/08 Javascript
bootstrap组件之按钮式下拉菜单小结
2017/01/19 Javascript
node-sass安装失败的原因与解决方法
2017/09/04 Javascript
js 概率计算(简单版)
2017/09/12 Javascript
vue 音乐App QQ音乐搜索列表最新接口跨域设置方法
2018/09/25 Javascript
Node.js + express基本用法教程
2019/03/14 Javascript
vue中v-show和v-if的异同及v-show用法
2019/06/06 Javascript
Javascript前端下载后台传来的文件流代码实例
2020/08/18 Javascript
[08:17]Ti9 现场cosplay
2019/09/10 DOTA
Python 代码性能优化技巧分享
2012/08/07 Python
Python Requests安装与简单运用
2016/04/07 Python
python实现逻辑回归的方法示例
2017/05/02 Python
Python制作豆瓣图片的爬虫
2017/12/28 Python
python 处理string到hex脚本的方法
2018/10/26 Python
Django后台admin的使用详解
2019/07/08 Python
基于Django框架的权限组件rbac实例讲解
2019/08/31 Python
Windows10下Tensorflow2.0 安装及环境配置教程(图文)
2019/11/21 Python
numpy.ndarray 实现对特定行或列取值
2019/12/05 Python
Jupyter Notebook 安装配置与使用详解
2021/01/06 Python
CSS3解析抖音LOGO制作的方法步骤
2019/04/11 HTML / CSS
购买英国原创艺术:Art Gallery
2018/08/25 全球购物
师范生实习的个人自我鉴定
2013/10/20 职场文书
高中生期末评语
2014/01/28 职场文书
测绘专业大学生职业生涯规划书
2014/02/10 职场文书
幼儿园师德演讲稿
2014/05/06 职场文书
调研汇报材料范文
2014/08/17 职场文书
乡镇计划生育工作汇报
2014/10/28 职场文书
2015年元旦主持词结束语
2014/12/14 职场文书
优秀乡村医生事迹材料(2016精选版)
2016/02/29 职场文书
golang中切片copy复制和等号复制的区别介绍
2021/04/27 Golang