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访问sqlserver示例
Feb 10 Python
Python Queue模块详解
Nov 30 Python
介绍Python中内置的itertools模块
Apr 29 Python
编写自定义的Django模板加载器的简单示例
Jul 21 Python
Python获取本机所有网卡ip,掩码和广播地址实例代码
Jan 22 Python
django orm 通过related_name反向查询的方法
Dec 15 Python
python爬虫实现中英翻译词典
Jun 25 Python
Django对models里的objects的使用详解
Aug 17 Python
python-Web-flask-视图内容和模板知识点西宁街
Aug 23 Python
PyCharm专业最新版2019.1安装步骤(含激活码)
Oct 09 Python
python使用itchat模块给心爱的人每天发天气预报
Nov 25 Python
TensorFlow2.X使用图片制作简单的数据集训练模型
Apr 08 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实现批量修改文件名称的方法
2016/07/23 PHP
thinkPHP5框架路由常用知识点汇总
2019/09/15 PHP
快速保存网页中所有图片的方法
2006/06/23 Javascript
解决jquery的.animate()函数在IE6下的问题
2010/12/03 Javascript
Js 时间间隔计算的函数(间隔天数)
2011/11/15 Javascript
JavaScript高级程序设计(第3版)学习笔记3 js简单数据类型
2012/10/11 Javascript
jquery批量控制form禁用的代码
2013/08/06 Javascript
javascript实现数字+字母验证码的简单实例
2014/02/10 Javascript
WEB前端设计师常用工具集锦
2014/12/09 Javascript
深入学习jQuery Validate表单验证(二)
2016/01/18 Javascript
基于jQuery实现选项卡效果
2017/01/04 Javascript
微信小程序实现滑动删除效果
2017/05/19 Javascript
mui 打开新窗口的方式总结及注意事项
2017/08/20 Javascript
ionic选择多张图片上传的示例代码
2017/10/10 Javascript
vue头部导航动态点击处理方法
2018/11/02 Javascript
详解vue中的computed的this指向问题
2018/12/05 Javascript
解决vue中使用proxy配置不同端口和ip接口问题
2019/08/14 Javascript
[03:09]显微镜下的DOTA2第一期——带你走进华丽的DOTA2世界
2014/06/20 DOTA
Python爬取Coursera课程资源的详细过程
2014/11/04 Python
用Python程序抓取网页的HTML信息的一个小实例
2015/05/02 Python
使用Python来编写HTTP服务器的超级指南
2016/02/18 Python
Python使用logging模块实现打印log到指定文件的方法
2018/09/05 Python
Python实现去除列表中重复元素的方法总结【7种方法】
2019/02/16 Python
pandas DataFrame行或列的删除方法的实现示例
2019/08/02 Python
Python Celery多队列配置代码实例
2019/11/22 Python
python手写均值滤波
2020/02/19 Python
python使用dlib进行人脸检测和关键点的示例
2020/12/05 Python
python RSA加密的示例
2020/12/09 Python
Pandas DataFrame求差集的示例代码
2020/12/13 Python
Farfetch阿联酋:奢侈品牌时尚购物平台
2019/07/26 全球购物
建筑设计学生的自我评价
2014/01/16 职场文书
新闻编辑自荐书范文
2014/02/12 职场文书
中文专业毕业生自荐信
2014/05/24 职场文书
尊师重教演讲稿
2014/09/04 职场文书
信息与计算机科学职业规划范文:成为一艘有方向的船
2014/09/11 职场文书
学生无故旷课检讨书
2014/09/20 职场文书