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之入门(五)缩进和选择
May 27 Python
Python3实现Web网页图片下载
Jan 28 Python
Python模拟用户登录验证
Sep 11 Python
Python探索之ModelForm代码详解
Oct 26 Python
django框架实现一次性上传多个文件功能示例【批量上传】
Jun 19 Python
Python Opencv任意形状目标检测并绘制框图
Jul 23 Python
Python input函数使用实例解析
Nov 22 Python
python 创建一维的0向量实例
Dec 02 Python
Pandas-Cookbook 时间戳处理方式
Dec 07 Python
Pycharm配置PyQt5环境的教程
Apr 02 Python
你喜欢篮球吗?Python实现篮球游戏
Jun 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
PHP异步调用socket实现代码
2012/01/12 PHP
浅析关于PHP位运算的简单权限设计
2013/06/30 PHP
js同时按下两个方向键
2007/12/01 Javascript
jQuery随机切换图片的小例子
2013/04/18 Javascript
jQuery插件的写法分享
2013/06/12 Javascript
JS+CSS实现简易的滑动门效果代码
2015/09/24 Javascript
js实现商城星星评分的效果
2015/12/29 Javascript
一览画面点击复选框后获取多个id值的方法
2016/05/30 Javascript
Javascript动画效果(4)
2016/10/11 Javascript
AngularJS实现根据变量改变动态加载模板的方法
2016/11/04 Javascript
进阶之初探nodeJS
2017/01/24 NodeJs
JS实现的文件拖拽上传功能示例
2018/05/21 Javascript
使用async await 封装 axios的方法
2018/07/09 Javascript
Node.JS枚举统计当前文件夹和子目录下所有代码文件行数
2019/08/23 Javascript
JS跨浏览器解析XML应用过程详解
2020/10/16 Javascript
原生js实现俄罗斯方块
2020/10/20 Javascript
pygame学习笔记(3):运动速率、时间、事件、文字
2015/04/15 Python
Python函数式编程指南(二):从函数开始
2015/06/24 Python
python使用多进程的实例详解
2018/09/19 Python
对python中的高效迭代器函数详解
2018/10/18 Python
Python字典的核心底层原理讲解
2019/01/24 Python
QT5 Designer 打不开的问题及解决方法
2020/08/20 Python
Pycharm安装python库的方法
2020/11/24 Python
使用python tkinter开发一个爬取B站直播弹幕工具的实现代码
2021/02/07 Python
机电专业毕业生求职信
2013/10/27 职场文书
二手房购房意向书范本
2014/04/01 职场文书
吨的认识教学反思
2014/04/27 职场文书
教师节演讲稿
2014/05/06 职场文书
激励口号大全
2014/06/17 职场文书
市场营销工作计划书
2014/09/15 职场文书
上甘岭观后感
2015/06/10 职场文书
毕业赠语大全
2015/06/23 职场文书
如果用一句诗总结你的上半年,你会用哪句呢?
2019/07/16 职场文书
vue首次渲染全过程
2021/04/21 Vue.js
Java中使用Filter过滤器的方法
2021/06/28 Java/Android
详解Flutter和Dart取消Future的三种方法
2022/04/07 Java/Android