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的Django框架的视图中使用Session的方法
Jul 23 Python
python 表达式和语句及for、while循环练习实例
Jul 07 Python
Python通过OpenCV的findContours获取轮廓并切割实例
Jan 05 Python
Python随机函数random()使用方法小结
Apr 29 Python
用python实现将数组元素按从小到大的顺序排列方法
Jul 02 Python
用Python编写一个简单的CS架构后门的方法
Nov 20 Python
python SQLAlchemy的Mapping与Declarative详解
Jul 04 Python
Numpy对数组的操作:创建、变形(升降维等)、计算、取值、复制、分割、合并
Aug 28 Python
Python Django2.0集成Celery4.1教程
Nov 19 Python
python cv2截取不规则区域图片实例
Dec 21 Python
pytorch中nn.Conv1d的用法详解
Dec 31 Python
tensorflow 实现自定义梯度反向传播代码
Feb 10 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 开发者该知道的 5 个 Composer 小技巧
2016/02/03 PHP
php使用fputcsv实现大数据的导出操作详解
2020/02/27 PHP
js 实现无缝滚动 兼容IE和FF
2009/07/15 Javascript
jquery ui dialog ie8出现滚动条的解决方法
2010/12/06 Javascript
Extjs4 类的定义和扩展实例
2013/06/28 Javascript
用RadioButten或CheckBox实现div的显示与隐藏
2013/09/21 Javascript
ajaxFileUpload.js插件支持多文件上传的方法
2014/09/02 Javascript
浅谈nodeName,nodeValue,nodeType,typeof 的区别
2015/01/13 Javascript
利用js实现禁止复制文本信息
2015/06/03 Javascript
在JavaScript中操作时间之getUTCDate()方法的使用
2015/06/10 Javascript
js仿苹果iwatch外观的计时器代码分享
2015/08/26 Javascript
JavaScript基础知识之方法汇总结
2016/01/24 Javascript
使用Ajax与服务器(JSON)通信实例
2016/11/04 Javascript
JS查找字符串中出现最多的字符及个数统计
2017/02/04 Javascript
JS判断时间段的实现代码
2017/06/14 Javascript
js+html制作简单日历的方法
2017/06/27 Javascript
JS分页的实现(同步与异步)
2017/09/16 Javascript
从vue源码解析Vue.set()和this.$set()
2018/08/30 Javascript
解决Vue+Electron下Vuex的Dispatch没有效果问题
2019/05/20 Javascript
小程序点击图片实现png转jpg
2019/10/22 Javascript
Vue如何循环提取对象数组中的值
2020/11/18 Vue.js
django model去掉unique_together报错的解决方案
2016/10/18 Python
Python数据可视化编程通过Matplotlib创建散点图代码示例
2017/12/09 Python
python 将print输出的内容保存到txt文件中
2018/07/17 Python
详解查看Python解释器路径的两种方式
2020/10/15 Python
德国最大的网上鞋店之一:Schuhe24.de
2017/06/10 全球购物
StubHub新西兰:购买和出售你的门票
2019/04/22 全球购物
Tuckernuck官网:经典的美国品质服装、鞋子和配饰
2021/01/11 全球购物
linux面试题参考答案(10)
2016/10/26 面试题
应届生人事助理求职信
2013/11/09 职场文书
学前教育毕业生自荐信范文
2013/12/24 职场文书
期终自我鉴定
2014/02/17 职场文书
小学秋季运动会报道稿
2014/09/30 职场文书
解决numpy和torch数据类型转化的问题
2021/05/23 Python
微信小程序APP的事件绑定以及传递参数时的冒泡和捕获
2022/04/19 Javascript
Nginx 常用配置
2022/05/15 Servers