整体UI面板绘制参照https://www.cnblogs.com/babashi9527/p/17146645.html
接着UI面板的设计;
实现树形结构菜单的方式有很多种,每一种优化UI显示的方式可能存在较大差异;
我们这里采用的是wx.lib.agw.customtreectrl 模块CustomTreeCtrl类;
而且在这里,root节点和子节点采用得到方法还不一样;
一、其中子节点可以字节使用AppendItem()方法
AppendItem()
方法的参数解析:
CustomTreeCtrl.AppendItem(self, parent, text='', image=-1, selImage=-1, data=None) -> CustomTreeItem
parent
:wx.TreeItemId
类型,表示树形结构中此项的父级项 ID。text
:string
或unicode
类型,表示要添加的这个项的文本标签。image
:int
类型,表示此项在未选中状态下的图像索引号。如果没有图像,则传递-1
。selImage
:int
类型,表示此项在选中状态下的图像索引号。如果没有图像,则传递-1
。data
: 任何类型的数据,表示与此项相关联的数据。
该方法返回一个 CustomTreeItem
对象,代表添加的树形节点。你可以对该节点进行操作,例如设置选中状态、展开或折叠等。同时,返回的 CustomTreeItem
对象还包含有关该节点的其他数据,例如父级 ID、子节点 ID 等。
例如我们这里在分值定义的时候使用AppendItem()方法引用位图:
def _load_note_books(self): #定义tree分支 root_node = self.AppendItem(self.root, "9527",image=1, selImage=1) root_node2 = self.AppendItem(self.root, "8656",image=2, selImage=2) self.ExpandAll()
二、根节点root采用的是self.SetItemImage(self.root, 0)方法,其中self.root是根节点,0是位图表索引为0的位图;
三、在设置引用之前必须先创建位图表:
#************************ # 创建一个 wx.ImageList 对象,指定图像大小(宽度和高度)为 24*30 像素 self.image_list = wx.ImageList(24, 30) # 在 wx.ImageList 对象中添加位图对象 root_bitmap = PicturepackageUI.medal_2_line.GetBitmap() self.image_list.Add(root_bitmap) bitmap_9527 = PicturepackageUI.customer_service_fill.GetBitmap() self.image_list.Add(bitmap_9527) bitmap_8656 = PicturepackageUI.mac_fill.GetBitmap() self.image_list.Add(bitmap_8656) # 将图像列表分配给树控件 self.AssignImageList(self.image_list) #************************
这里有需要注意一下:
在 wxPython 中,位图的尺寸必须与用于创建 wx.ImageList
对象时指定的尺寸相同。如果位图的尺寸小于 wx.ImageList
对象指定的尺寸,那么位图将被缩放以适合 wx.ImageList
对象。但是,如果位图的尺寸大于 wx.ImageList
对象指定的尺寸,则位图将不会显示。
这是因为 wx.ImageList
对象只有在创建时才能指定位图的尺寸。如果尝试添加大于 wx.ImageList
对象指定的尺寸的位图,将引发错误或未定义的行为。通常情况下,应在创建 wx.ImageList
对象时使用与位图大小相同的尺寸,以确保可以正确地显示所有位图。
如果需要在 wx.ImageList
中使用不同大小的位图,则可以创建多个 wx.ImageList
对象,并根据需要使用它们。例如,可以使用一个 wx.ImageList
对象来处理 16x16 的位图,另一个对象处理 24x24 的位图。然后根据需要在树控件或列表控件中使用不同的 wx.ImageList
对象。
以下是使用多个 wx.ImageList
对象处理不同大小的位图的示例代码:
# 创建一个新的 wx.ImageList 对象以处理 16x16 的位图
self.image_list_16 = wx.ImageList(16, 16)
# 创建一个新的 wx.ImageList 对象以处理 24x24 的位图
self.image_list_24 = wx.ImageList(24, 24)
# 将索引为 0 的 16x16 位图添加到第一个 ImageList
bmp1 = wx.Bitmap("image1.png")
self.image_list_16.Add(bmp1)
# 将索引为 0 的 24x24 位图添加到第二个 ImageList
bmp2 = wx.Bitmap("image2.png")
self.image_list_24.Add(bmp2)
# 在树控件中使用第一个 ImageList 来显示 16x16 的位图
self.tree_ctrl.SetImageList(self.image_list_16)
# 在列表控件中使用第二个 ImageList 来显示 24x24 的位图
self.list_ctrl.SetImageList(self.image_list_24)
在上述代码中,我们首先创建了两个 wx.ImageList
对象,一个用于处理 16x16 的位图,另一个用于处理 24x24 的位图。然后,我们将位图添加到相应的 wx.ImageList
对象中,并将其用于树控件和列表控件中。注意,我们必须将不同大小的位图添加到不同的 wx.ImageList
对象中,并使用相应的 wx.ImageList
对象将它们显示在控件中。
标签:list,self,Tree,UI,ImageList,位图,优化,image,wx From: https://www.cnblogs.com/babashi9527/p/17226865.html