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 相关文章推荐
用ReactJS和Python的Flask框架编写留言板的代码示例
Dec 19 Python
Python实现曲线拟合操作示例【基于numpy,scipy,matplotlib库】
Jul 12 Python
python 对给定可迭代集合统计出现频率,并排序的方法
Oct 18 Python
对pyqt5中QTabWidget的相关操作详解
Jun 21 Python
python调用其他文件函数或类的示例
Jul 16 Python
树莓派使用python-librtmp实现rtmp推流h264的方法
Jul 22 Python
python实现宿舍管理系统
Nov 22 Python
Python底层封装实现方法详解
Jan 22 Python
python代码如何实现余弦相似性计算
Feb 09 Python
解决tensorboard多个events文件显示紊乱的问题
Feb 15 Python
详解anaconda离线安装pytorchGPU版
Sep 08 Python
python 动态渲染 mysql 配置文件的示例
Nov 20 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第一次无法获取cookie问题处理
2014/12/15 PHP
JavaScript 笔记二 Array和Date对象方法
2010/05/22 Javascript
修改js Calendar日历控件 兼容IE9/谷歌/火狐
2013/01/04 Javascript
JqueryMobile动态生成listView并实现刷新的两种方法
2014/03/05 Javascript
connect中间件session、cookie的使用方法分享
2014/06/17 Javascript
jquery图片切换实例分析
2015/04/15 Javascript
Jquery判断form表单数据是否变化
2016/03/30 Javascript
javascript实现抽奖程序的简单实例
2016/06/07 Javascript
Javascript中的神器——Promise
2017/02/08 Javascript
浅谈vue中使用图片懒加载vue-lazyload插件详细指南
2017/10/23 Javascript
AngularJS实现自定义指令及指令配置项的方法
2017/11/20 Javascript
Vue验证码60秒倒计时功能简单实例代码
2018/06/22 Javascript
详解Vue、element-ui、axios实现省市区三级联动
2019/05/07 Javascript
jQuery zTree插件快速实现目录树
2019/08/16 jQuery
在vant 中使用cell组件 定义图标该图片和位置操作
2020/11/02 Javascript
[49:35]KG vs SECRET 2019国际邀请赛小组赛 BO2 第一场 8.16
2019/08/19 DOTA
python单链表实现代码实例
2013/11/21 Python
python抽象基类用法实例分析
2015/06/04 Python
Windows下Anaconda的安装和简单使用方法
2018/01/04 Python
Python实现处理逆波兰表达式示例
2018/07/30 Python
Django组件之cookie与session的使用方法
2019/01/10 Python
python使用beautifulsoup4爬取酷狗音乐代码实例
2019/12/04 Python
Transpose 数组行列转置的限制方式
2020/02/11 Python
Python把图片转化为pdf代码实例
2020/07/28 Python
基于CSS3 animation动画属性实现轮播图效果
2017/09/12 HTML / CSS
美国便宜的横幅和标志印刷在线:Best of Signs
2019/05/29 全球购物
大学生创业策划书
2014/02/02 职场文书
寄语学生的话
2014/04/10 职场文书
国际商务专业毕业生自我鉴定2014
2014/09/27 职场文书
2015届大学生就业推荐表自我评价
2014/09/27 职场文书
2015年置业顾问工作总结
2015/04/07 职场文书
2015年工程师工作总结
2015/04/30 职场文书
党小组鉴定意见
2015/06/02 职场文书
导游词之西江千户苗寨
2019/12/24 职场文书
mysql备份策略的实现(全量备份+增量备份)
2021/07/07 MySQL
解析MySQL索引的作用
2022/03/03 MySQL