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通过imaplib模块读取gmail里邮件的方法
May 08 Python
python中实现数组和列表读取一列的方法
Apr 03 Python
Python基于Floyd算法求解最短路径距离问题实例详解
May 16 Python
Python利用ORM控制MongoDB(MongoEngine)的步骤全纪录
Sep 13 Python
python3.6利用pyinstall打包py为exe的操作实例
Oct 31 Python
通过python实现弹窗广告拦截过程详解
Jul 10 Python
Django文件存储 默认存储系统解析
Aug 02 Python
Python实现滑动平均(Moving Average)的例子
Aug 24 Python
python修改文件内容的3种方法详解
Nov 15 Python
Matplotlib自定义坐标轴刻度的实现示例
Jun 18 Python
使用Python实现NBA球员数据查询小程序功能
Nov 09 Python
Python 图片添加美颜效果
Apr 28 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中获取关键词及所属来源搜索引擎名称的代码
2011/02/15 PHP
PHP中替换换行符的几种方法小结
2012/10/15 PHP
windows下安装php的memcache模块的方法
2015/04/07 PHP
大家都应该掌握的PHP关联数组使用技巧
2015/12/25 PHP
Yii实现显示静态页的方法
2016/04/25 PHP
PHP实现的登录,注册及密码修改功能分析
2016/11/25 PHP
PHP实现针对日期,月数,天数,周数,小时,分,秒等的加减运算示例【基于strtotime】
2017/04/19 PHP
ThinkPHP框架整合微信支付之JSAPI模式图文详解
2019/04/09 PHP
PHP 计算至少是其他数字两倍的最大数的实现代码
2020/05/26 PHP
你的编程语言可以这样做吗?
2006/09/07 Javascript
网上抓的一个特效
2007/05/11 Javascript
用js统计用户下载网页所需时间的脚本
2008/10/15 Javascript
EXTJS记事本 当CompositeField遇上RowEditor
2011/07/31 Javascript
Jquery中给animation加更多的运作效果实例
2013/09/05 Javascript
js实现页面跳转重定向的几种方式
2014/05/29 Javascript
Bootstrap表单布局样式源代码
2016/07/04 Javascript
jQuery实现日期联动效果实例
2016/07/26 Javascript
Vue中"This dependency was not found"问题的解决方法
2018/06/19 Javascript
打通前后端构建一个Vue+Express的开发环境
2018/07/17 Javascript
解决layui批量传值到后台操作时出现传值为空的问题
2019/09/28 Javascript
微信小程序实现弹框效果
2020/05/26 Javascript
Vue+Element UI 树形控件整合下拉功能菜单(tree + dropdown +input)
2020/08/28 Javascript
Python中的__new__与__init__魔术方法理解笔记
2014/11/08 Python
Python中用Spark模块的使用教程
2015/04/13 Python
python rsa 加密解密
2017/03/20 Python
python TCP Socket的粘包和分包的处理详解
2018/02/09 Python
python系列 文件操作的代码
2019/10/06 Python
python如何实现不用装饰器实现登陆器小程序
2019/12/14 Python
美国首屈一指的高品质珠宝设计师和零售商:Allurez
2018/01/23 全球购物
中职生自荐信
2013/10/13 职场文书
爱心活动计划书
2014/04/26 职场文书
科学发展观标语
2014/10/08 职场文书
旷课检讨书
2015/01/26 职场文书
初三英语教学反思
2016/02/15 职场文书
原生JS封装vue Tab切换效果
2021/04/28 Vue.js
分位数回归模型quantile regeression应用详解及示例教程
2021/11/02 Python