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中删除文件的程序代码
Mar 13 Python
python在多玩图片上下载妹子图的实现代码
Aug 13 Python
Python 检查数组元素是否存在类似PHP isset()方法
Oct 14 Python
Linux下通过python访问MySQL、Oracle、SQL Server数据库的方法
Apr 23 Python
Python运行报错UnicodeDecodeError的解决方法
Jun 07 Python
Python操作mysql数据库实现增删查改功能的方法
Jan 15 Python
Python3 中把txt数据文件读入到矩阵中的方法
Apr 27 Python
springboot配置文件抽离 git管理统 配置中心详解
Sep 02 Python
Python文件操作方法详解
Feb 09 Python
Python ORM框架Peewee用法详解
Apr 29 Python
基于python定位棋子位置及识别棋子颜色
Jul 26 Python
Python使用MapReduce进行简单的销售统计
Apr 22 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 检查电子邮件函数(自写)
2014/01/16 PHP
Yii2使用小技巧之通过 Composer 添加 FontAwesome 字体资源
2014/06/22 PHP
ThinkPHP、ZF2、Yaf、Laravel框架路由大比拼
2015/03/25 PHP
PHP实现下载远程图片保存到本地的方法
2017/06/19 PHP
在thinkphp5.0路径中实现去除index.php的方式
2019/10/16 PHP
Prototype Class对象学习
2009/07/19 Javascript
DOM 脚本编程中的兄弟节点
2009/10/31 Javascript
js 得到文件后缀(通过正则实现)
2013/07/08 Javascript
JavaScript实现的图像模糊算法代码分享
2014/04/22 Javascript
JavaScript实现常用二级省市级联下拉列表的方法
2015/03/25 Javascript
详解JavaScript中的blink()方法的使用
2015/06/08 Javascript
js判断子窗体是否关闭的方法
2015/08/11 Javascript
javascript实现自动输出文本(打字特效)
2015/08/27 Javascript
JS实现的打字机效果完整实例
2016/06/20 Javascript
javascript事件冒泡简单示例
2016/06/20 Javascript
JS框架之vue.js(深入三:组件1)
2016/09/29 Javascript
微信小程序 轮播图swiper详解及实例(源码下载)
2017/01/11 Javascript
Angular2中监听数据更新的方法
2018/08/31 Javascript
微信小程序顶部导航栏滑动tab效果
2019/01/28 Javascript
vue.config.js中配置Vue的路径别名的方法
2020/02/11 Javascript
JavaScript多种图形实现代码实例
2020/06/28 Javascript
如何在面试中手写出javascript节流和防抖函数
2020/10/22 Javascript
[02:40]2018年度DOTA2最佳新人-完美盛典
2018/12/16 DOTA
[03:02]2020完美世界城市挑战赛(秋季赛)总决赛回顾
2021/03/11 DOTA
python实现比较文件内容异同
2018/06/22 Python
解决新django中的path不能使用正则表达式的问题
2018/12/18 Python
Pytorch提取模型特征向量保存至csv的例子
2020/01/03 Python
使用tensorflow显示pb模型的所有网络结点方式
2020/01/23 Python
基于Keras 循环训练模型跑数据时内存泄漏的解决方式
2020/06/11 Python
Django实现文章详情页面跳转代码实例
2020/09/16 Python
python实现感知机模型的示例
2020/09/30 Python
HTML5自定义mp3播放器源码
2020/01/06 HTML / CSS
钳工实习自我鉴定
2013/09/19 职场文书
如何写自我评价?自我评价写什么好?
2014/03/14 职场文书
个人优缺点总结
2015/02/28 职场文书
数据库的高级查询六:表连接查询:外连接(左外连接,右外连接,UNION关键字,连接中ON与WHERE的不同)
2021/04/05 MySQL