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统计日志ip访问数的方法
Jul 06 Python
Python for Informatics 第11章 正则表达式(一)
Apr 21 Python
浅谈Python2.6和Python3.0中八进制数字表示的区别
Apr 28 Python
Python简单读取json文件功能示例
Nov 30 Python
Python-while 计算100以内奇数和的方法
Jun 11 Python
pyqt5 QProgressBar清空进度条的实例
Jun 21 Python
Python Django的安装配置教程图文详解
Jul 17 Python
python 数据生成excel导出(xlwt,wlsxwrite)代码实例
Aug 23 Python
python 实现提取log文件中的关键句子,并进行统计分析
Dec 24 Python
python sorted函数原理解析及练习
Feb 10 Python
python-xpath获取html文档的部分内容
Mar 06 Python
Python可视化动图组件ipyvizzu绘制惊艳的可视化动图
Apr 21 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执行速度全攻略(下)
2006/10/09 PHP
php上传文件的增强函数
2010/07/21 PHP
PHP实现过滤掉非汉字字符只保留中文字符
2015/06/04 PHP
Javascript Cookie读写删除操作的函数
2010/03/02 Javascript
jQuery 网易相册鼠标移动显示隐藏效果实现代码
2013/03/31 Javascript
chrome浏览器不支持onmouseleave事件的解决技巧
2013/05/31 Javascript
JS对象与json字符串格式转换实例
2014/10/28 Javascript
JQuery报错Uncaught TypeError: Illegal invocation的处理方法
2015/03/13 Javascript
微信小程序 location API实例详解
2016/10/02 Javascript
vue自定义指令实现v-tap插件
2016/11/03 Javascript
JavaScript之Vue.js【入门基础】
2016/12/06 Javascript
vue嵌套路由与404重定向实现方法分析
2018/05/04 Javascript
jQuery实现的页面详情展开收起功能示例
2018/06/11 jQuery
微信小程序实现点击卡片 翻转效果
2019/09/04 Javascript
原生js拖拽实现图形伸缩效果
2020/02/10 Javascript
原生JS实现微信通讯录
2020/06/18 Javascript
以911新闻为例演示Python实现数据可视化的教程
2015/04/23 Python
详解Python如何获取列表(List)的中位数
2016/08/12 Python
浅谈django中的认证与登录
2016/10/31 Python
python3处理含有中文的url方法
2018/05/10 Python
详解Python给照片换底色(蓝底换红底)
2019/03/22 Python
pycharm第三方库安装失败的问题及解决经验分享
2020/05/09 Python
让Django的BooleanField支持字符串形式的输入方式
2020/05/20 Python
opencv 图像滤波(均值,方框,高斯,中值)
2020/07/08 Python
Python2及Python3如何实现兼容切换
2020/09/01 Python
如何将json数据转换为python数据
2020/09/04 Python
Canvas与图片压缩的示例代码
2017/11/28 HTML / CSS
AmazeUI 按钮交互的实现示例
2020/08/24 HTML / CSS
英国男女奢华内衣和泳装购物网站:Figleaves
2017/01/28 全球购物
银行员工职业规划范文
2014/01/21 职场文书
差生评语大全
2014/05/04 职场文书
教师四风问题整改措施
2014/09/25 职场文书
2016教师学习党章心得体会
2016/01/15 职场文书
导游词之苏州盘门景区
2019/11/12 职场文书
详解Redis集群搭建的三种方式
2021/05/31 Redis
Python re.sub 反向引用的实现
2021/07/07 Python