from PyQt5.QtWidgets import (QApplication, QWidget, QHBoxLayout,
QTreeWidget, QTreeWidgetItem,
QGroupBox)
from PyQt5.QtGui import QIcon, QPixmap
from PyQt5.QtCore import QSize class Bar_Navigation(QWidget):
def __init__(self):
super(Bar_Navigation, self).__init__()
self.setMinimumHeight(600);
self.setMinimumWidth(800); ##layout_main.setMargin(5)
##layout_main.setSpace(5)
self.creat_main_layout()
self.creat_bar_navigation()
self.creat_left_box() def get_bar_list(self): bar_list_item = []
bar_list_1 = ["订货管理",
["客户订货", "库存订货", "供货商订货"]
]
bar_list_2 = ["入库管理",
["采购入库", "订货入库", "其它入库"]
]
bar_list_item.append(bar_list_1)
bar_list_item.append(bar_list_2)
return bar_list_item def creat_main_layout(self):
self.layout_main = QHBoxLayout()
self.setLayout( self.layout_main) def creat_bar_list(self, data): for item in data:
item_1 = QTreeWidgetItem( self.tree_Navigation);
##item_1.setText(0,item[0])

          ## 设置节点的打开/关闭状态下的不同的图片
icon = QIcon()
##节点打开状态
icon.addPixmap(QPixmap("./logo2.png"), QIcon.Normal, QIcon.On)
##节点关闭状态  
icon.addPixmap(QPixmap("./logo1.png"), QIcon.Normal, QIcon.Off)
item_1.setIcon(0, icon) for item_item in item[1]:
item_1_1 = QTreeWidgetItem( item_1);
item_1_1.setText(0,item_item)
self.tree_Navigation.addTopLevelItem(item_1); def creat_bar_navigation(self):
self.tree_Navigation = QTreeWidget()
self.tree_Navigation.setHeaderLabel("左侧导航栏");
self.tree_Navigation.setColumnCount(1)
self.tree_Navigation.setMaximumWidth(150); icon_size = QSize(100, 30)
self.tree_Navigation.setIconSize(icon_size) ##如果treewidget就一列,该列的宽度默认等于treewidget的宽度,两列以上的话才起作用.
##self.tree_Navigation.setColumnWidth(0,100);
data = self.get_bar_list()
self.creat_bar_list(data)
self.layout_main.addWidget(self.tree_Navigation)
## QModelIndex
##self.tree_Navigation.doubleClicked.connect(self.showModelSelected)
## QTreeWidgetItem
self.tree_Navigation.itemDoubleClicked.connect(self.showSelected) ## QModelIndex
def showModelSelected(self, modelIndex):
print( modelIndex.row(), modelIndex.column()) ## itemObj:QTreeWidgetItem
def showSelected(self, item, column):
##获得父节点
parent=item.parent() ## 注:本例的深度只有2,因此只有index_top,index_row两个变量表示路径
##根节点上的索引
## 合理值:非负整数
index_top = 0
## 子节点上的索引
##如果为-1则标示是根节点上的项;如果不是-1则标示在子节点上
## 合理值:非负整数
index_row = -1 ## 如果是要判断是否为None,则:
if parent is None:
index_top= self.tree_Navigation.indexOfTopLevelItem(item)
else :
index_top = self.tree_Navigation.indexOfTopLevelItem(parent)
index_row=parent.indexOfChild(item)##获得节点在父节点中的行号(从0开始) print(index_top, index_row) def creat_left_box(self):
self.box_left = QGroupBox('left party')
self.layout_main.addWidget(self.box_left) if __name__ == "__main__": import sys app = QApplication(sys.argv)
window = Bar_Navigation()
window.show() sys.exit(app.exec_())

个人注解:

①、treeWidget.setColumnWidth(0,100)

如果treewidget就一列,该列的宽度默认等于treewidget的宽度,两列以上的话才起作用,

②、如果是treeview获取点击的层级路径:

  modelindex.parent()可以获得其上级。

QTreeWidget 获取被双击的子项的层次路径的更多相关文章

  1. Android获取内置sdcard跟外置sdcard路径

    Android获取内置sdcard跟外置sdcard路径.(测试过两个手机,亲测可用) 1.先得到外置sdcard路径,这个接口是系统提供的标准接口. 2.得到上一级文件夹目录 3.得到该目录的所有文 ...

  2. python3下获取主流浏览器和python的安装路径

    #coding=utf-8#python3下获取主流浏览器和python的安装路径#by dengpeiyou date:2018-07-09import winreg,os #取得浏览器的安装路径d ...

  3. android获取内置和外置SD卡路径 - z

    本文将介绍Android真机环境下如何获取内置和外置SD卡路径. 测试环境:三星Note3,其他手机待测试... 所需权限(AndroidManifest.xml文件里) <uses-permi ...

  4. js获取当前域名、Url、相对路径和参数

    用 Javascript 可以单独获取当前域名.Url.相对路径和参数,所谓单独攻取,即域名不包括网页文件的路径和参数.参数不包括域名和网页文件路径,下面分别介绍. 一.js获取当前域名有2种方法 1 ...

  5. 获取android的SDK或者手机目录路径

    获取android的SDK或者手机目录路径 Google为我们提供了API来获取SDK或者手机目录路径: 1.获取SD卡目录 File file1 = Environment.getExternalS ...

  6. 获取dataGridView双击时判断双击的是下面的行,还是列头

    private void dataGridView1_DoubleClick(object sender, EventArgs e) { Point hit = this.dataGridView1. ...

  7. js获取当前域名、Url、相对路径和参数以及指定参数

    一.js获取当前域名有2种方法 1.方法一 var domain = document.domain; 2.方法二 var domain = window.location.host; 3.注意问题 ...

  8. C# 如何获取当前应用程序的上一级路径

    Server.MapPath 的使用方法 用法: 1.Server.MapPath ("/") 应用程序根目录所在的位置 如 C:\Inetpub\wwwroot\ 2.Serve ...

  9. java 递归获取一个目录下的所有文件路径

    还是日志的问题,log4j生成的日志文件,自动保存到月份所在的文件夹中,需要获取到所有的日志文件,包括文件夹 private List<String> ergodic(File file, ...

随机推荐

  1. com.fasterxml.jackson.core.JsonParseException: Unexpected character

    com.fasterxml.jackson.core.JsonParseException: Unexpected )): was expecting double-quote to start fi ...

  2. SpringMVC中使用-sqljdbc4.jar

    昨天将现在写的Web项目中的数据库由MySQL换成SQLServer,昨天想把MySQL重新安装一下,但是由于不明原因,导致无法安装. 卸载MySQL.删除安装文件.删除注册表.重启电脑.但是安装的时 ...

  3. java web 中的MVC

    M:相当于Bean V:jsp C:servlet 当客户端发来请求,servlet响应请求处理请求,并把要发送给客户端的数据封装到Bean中,然后通过转发,将这个封装好了数据Bean送给jsp,js ...

  4. centos 6.5安装docker报错(查看报错详细信息--推荐)

    (1)yum安装docker [root@namenode ~]# yum install docker-io (2)启动docker [root@namenode ~]# /etc/init.d/d ...

  5. MySQL5.6 主从复制 ERROR 1776 (HY000): Parameters MASTER_LOG_FILE

    主从都开启了gtid,在设置从库的时候遇到了问题 mysql> CHANGE MASTER TO MASTER_HOST=‘xxx’,MASTER_USER='replicant',MASTER ...

  6. Android 设计的几处硬伤

    [核心提示] 一些 Android App 不仅仅是设计风格的问题,产品交互上也比较混乱,造成用户体验不一致,这一部分原因也是 Android 当初设计时遗留的问题. 前几天看到 NovaDNG 介绍 ...

  7. python基础之Event对象、队列和多进程基础

    Event对象 用于线程间通信,即程序中的其一个线程需要通过判断某个线程的状态来确定自己下一步的操作,就用到了event对象 event对象默认为假(Flase),即遇到event对象在等待就阻塞线程 ...

  8. 读写SQLServer数据库中的image类型数据(简单)

    1.将double类型的数据存储于image类型的变量中: (1). char *CManualForecastResultBll::DoubleArray2Binary(std::vector< ...

  9. unity3D中使用Socket进行数据通信(二)

    上一篇博客主要介绍了使用socket搭建服务端和client程序,这一篇来说说socket的数据传输,我们使用socket的目的是解决点对点之间的数据传输,之前提到了socket中一个重要的概念:po ...

  10. unity, water cube

    <纪念碑谷>里有一关开始是一个宝箱展开后里面有一个water cube,其中还有小鱼在游.如下截图: 因为我们知道<纪念碑谷>是unity做的,而现在正开始学unity,所以也 ...