• 第十七篇 -- QTreeWidget与QDockWidget


    效果图:

    目录和工具条的创建在前面几节就已经学过了,所以目录和工具条的布局可以自己画。

    那么下面的部分,左侧是一个DockWidget,里面放置一个TreeWidget。右边是一个ScrollArea,里面放置一个Label,用来放置图片的。其他属性的设置可以按照自己的需求调节。

    ui_treeWidget.py

    # -*- coding: utf-8 -*-
    
    # Form implementation generated from reading ui file 'ui_TreeWidget.ui'
    #
    # Created by: PyQt5 UI code generator 5.13.0
    #
    # WARNING! All changes made in this file will be lost!
    
    
    from PyQt5 import QtCore, QtGui, QtWidgets
    
    
    class Ui_MainWindow(object):
        def setupUi(self, MainWindow):
            MainWindow.setObjectName("MainWindow")
            MainWindow.resize(1003, 600)
            self.centralwidget = QtWidgets.QWidget(MainWindow)
            self.centralwidget.setObjectName("centralwidget")
            self.scrollArea = QtWidgets.QScrollArea(self.centralwidget)
            self.scrollArea.setGeometry(QtCore.QRect(0, 0, 721, 491))
            self.scrollArea.setWidgetResizable(True)
            self.scrollArea.setObjectName("scrollArea")
            self.scrollAreaWidgetContents = QtWidgets.QWidget()
            self.scrollAreaWidgetContents.setGeometry(QtCore.QRect(0, 0, 719, 489))
            self.scrollAreaWidgetContents.setObjectName("scrollAreaWidgetContents")
            self.horizontalLayout_2 = QtWidgets.QHBoxLayout(self.scrollAreaWidgetContents)
            self.horizontalLayout_2.setObjectName("horizontalLayout_2")
            self.LabPicture = QtWidgets.QLabel(self.scrollAreaWidgetContents)
            self.LabPicture.setText("")
            self.LabPicture.setAlignment(QtCore.Qt.AlignCenter)
            self.LabPicture.setObjectName("LabPicture")
            self.horizontalLayout_2.addWidget(self.LabPicture)
            self.scrollArea.setWidget(self.scrollAreaWidgetContents)
            MainWindow.setCentralWidget(self.centralwidget)
            self.menubar = QtWidgets.QMenuBar(MainWindow)
            self.menubar.setGeometry(QtCore.QRect(0, 0, 1003, 21))
            self.menubar.setObjectName("menubar")
            self.menu = QtWidgets.QMenu(self.menubar)
            self.menu.setObjectName("menu")
            self.menu_2 = QtWidgets.QMenu(self.menubar)
            self.menu_2.setObjectName("menu_2")
            MainWindow.setMenuBar(self.menubar)
            self.statusbar = QtWidgets.QStatusBar(MainWindow)
            self.statusbar.setObjectName("statusbar")
            MainWindow.setStatusBar(self.statusbar)
            self.toolBar = QtWidgets.QToolBar(MainWindow)
            font = QtGui.QFont()
            font.setPointSize(10)
            self.toolBar.setFont(font)
            self.toolBar.setToolButtonStyle(QtCore.Qt.ToolButtonTextUnderIcon)
            self.toolBar.setObjectName("toolBar")
            MainWindow.addToolBar(QtCore.Qt.TopToolBarArea, self.toolBar)
            self.dockWidget = QtWidgets.QDockWidget(MainWindow)
            self.dockWidget.setFeatures(QtWidgets.QDockWidget.AllDockWidgetFeatures)
            self.dockWidget.setAllowedAreas(QtCore.Qt.LeftDockWidgetArea|QtCore.Qt.RightDockWidgetArea)
            self.dockWidget.setObjectName("dockWidget")
            self.dockWidgetContents = QtWidgets.QWidget()
            self.dockWidgetContents.setObjectName("dockWidgetContents")
            self.horizontalLayout = QtWidgets.QHBoxLayout(self.dockWidgetContents)
            self.horizontalLayout.setObjectName("horizontalLayout")
            self.treeWidget = QtWidgets.QTreeWidget(self.dockWidgetContents)
            self.treeWidget.setObjectName("treeWidget")
            self.treeWidget.headerItem().setText(0, "节点")
            self.treeWidget.headerItem().setTextAlignment(0, QtCore.Qt.AlignCenter)
            self.treeWidget.headerItem().setTextAlignment(1, QtCore.Qt.AlignCenter)
            item_0 = QtWidgets.QTreeWidgetItem(self.treeWidget)
            item_1 = QtWidgets.QTreeWidgetItem(item_0)
            item_2 = QtWidgets.QTreeWidgetItem(item_1)
            item_1 = QtWidgets.QTreeWidgetItem(item_0)
            item_2 = QtWidgets.QTreeWidgetItem(item_1)
            self.treeWidget.header().setDefaultSectionSize(150)
            self.horizontalLayout.addWidget(self.treeWidget)
            self.dockWidget.setWidget(self.dockWidgetContents)
            MainWindow.addDockWidget(QtCore.Qt.DockWidgetArea(1), self.dockWidget)
            self.actTree_AddFolder = QtWidgets.QAction(MainWindow)
            icon = QtGui.QIcon()
            icon.addPixmap(QtGui.QPixmap("image/icon/AddFolder.jpg"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
            self.actTree_AddFolder.setIcon(icon)
            self.actTree_AddFolder.setObjectName("actTree_AddFolder")
            self.actTree_AddFiles = QtWidgets.QAction(MainWindow)
            icon1 = QtGui.QIcon()
            icon1.addPixmap(QtGui.QPixmap("image/icon/AddFiles.jpg"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
            self.actTree_AddFiles.setIcon(icon1)
            self.actTree_AddFiles.setObjectName("actTree_AddFiles")
            self.actZoomIn = QtWidgets.QAction(MainWindow)
            icon2 = QtGui.QIcon()
            icon2.addPixmap(QtGui.QPixmap("image/icon/ZoomIn.jpg"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
            self.actZoomIn.setIcon(icon2)
            self.actZoomIn.setObjectName("actZoomIn")
            self.actZoomOut = QtWidgets.QAction(MainWindow)
            icon3 = QtGui.QIcon()
            icon3.addPixmap(QtGui.QPixmap("image/icon/ZoomOut.jpg"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
            self.actZoomOut.setIcon(icon3)
            self.actZoomOut.setObjectName("actZoomOut")
            self.actZoomRealSize = QtWidgets.QAction(MainWindow)
            icon4 = QtGui.QIcon()
            icon4.addPixmap(QtGui.QPixmap("image/icon/ZoomRealSize.jpg"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
            self.actZoomRealSize.setIcon(icon4)
            self.actZoomRealSize.setObjectName("actZoomRealSize")
            self.actTree_DeleteItem = QtWidgets.QAction(MainWindow)
            icon5 = QtGui.QIcon()
            icon5.addPixmap(QtGui.QPixmap("image/icon/delete.jpg"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
            self.actTree_DeleteItem.setIcon(icon5)
            self.actTree_DeleteItem.setObjectName("actTree_DeleteItem")
            self.actZoomFitH = QtWidgets.QAction(MainWindow)
            icon6 = QtGui.QIcon()
            icon6.addPixmap(QtGui.QPixmap("image/icon/height.jpg"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
            self.actZoomFitH.setIcon(icon6)
            self.actZoomFitH.setObjectName("actZoomFitH")
            self.actZoomFitW = QtWidgets.QAction(MainWindow)
            icon7 = QtGui.QIcon()
            icon7.addPixmap(QtGui.QPixmap("image/icon/width.jpg"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
            self.actZoomFitW.setIcon(icon7)
            self.actZoomFitW.setObjectName("actZoomFitW")
            self.actTree_ScanItems = QtWidgets.QAction(MainWindow)
            icon8 = QtGui.QIcon()
            icon8.addPixmap(QtGui.QPixmap("image/icon/scanitem.jpg"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
            self.actTree_ScanItems.setIcon(icon8)
            self.actTree_ScanItems.setObjectName("actTree_ScanItems")
            self.actDockFloat = QtWidgets.QAction(MainWindow)
            self.actDockFloat.setCheckable(True)
            icon9 = QtGui.QIcon()
            icon9.addPixmap(QtGui.QPixmap("image/icon/dockfloat.jpg"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
            self.actDockFloat.setIcon(icon9)
            self.actDockFloat.setObjectName("actDockFloat")
            self.actDockVisible = QtWidgets.QAction(MainWindow)
            self.actDockVisible.setCheckable(True)
            icon10 = QtGui.QIcon()
            icon10.addPixmap(QtGui.QPixmap("image/icon/dockvisible.jpg"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
            self.actDockVisible.setIcon(icon10)
            self.actDockVisible.setObjectName("actDockVisible")
            self.actClose = QtWidgets.QAction(MainWindow)
            icon11 = QtGui.QIcon()
            icon11.addPixmap(QtGui.QPixmap("image/icon/quit.jpg"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
            self.actClose.setIcon(icon11)
            self.actClose.setObjectName("actClose")
            self.menu.addAction(self.actTree_AddFolder)
            self.menu.addAction(self.actTree_AddFiles)
            self.menu.addAction(self.actTree_DeleteItem)
            self.menu.addAction(self.actTree_ScanItems)
            self.menu.addSeparator()
            self.menu.addAction(self.actClose)
            self.menu_2.addAction(self.actZoomIn)
            self.menu_2.addAction(self.actZoomOut)
            self.menu_2.addAction(self.actZoomRealSize)
            self.menu_2.addSeparator()
            self.menu_2.addAction(self.actZoomFitH)
            self.menu_2.addAction(self.actZoomFitW)
            self.menubar.addAction(self.menu.menuAction())
            self.menubar.addAction(self.menu_2.menuAction())
            self.toolBar.addAction(self.actTree_AddFolder)
            self.toolBar.addAction(self.actTree_AddFiles)
            self.toolBar.addAction(self.actTree_DeleteItem)
            self.toolBar.addAction(self.actTree_ScanItems)
            self.toolBar.addSeparator()
            self.toolBar.addAction(self.actZoomIn)
            self.toolBar.addAction(self.actZoomOut)
            self.toolBar.addAction(self.actZoomRealSize)
            self.toolBar.addAction(self.actZoomFitW)
            self.toolBar.addAction(self.actZoomFitH)
            self.toolBar.addSeparator()
            self.toolBar.addAction(self.actDockFloat)
            self.toolBar.addAction(self.actDockVisible)
            self.toolBar.addSeparator()
            self.toolBar.addAction(self.actClose)
    
            self.retranslateUi(MainWindow)
            self.actClose.triggered.connect(MainWindow.close)
            QtCore.QMetaObject.connectSlotsByName(MainWindow)
    
        def retranslateUi(self, MainWindow):
            _translate = QtCore.QCoreApplication.translate
            MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))
            self.menu.setTitle(_translate("MainWindow", "目录树"))
            self.menu_2.setTitle(_translate("MainWindow", "视图"))
            self.toolBar.setWindowTitle(_translate("MainWindow", "toolBar"))
            self.dockWidget.setWindowTitle(_translate("MainWindow", "图片目录树"))
            self.treeWidget.headerItem().setText(1, _translate("MainWindow", "节点类型"))
            __sortingEnabled = self.treeWidget.isSortingEnabled()
            self.treeWidget.setSortingEnabled(False)
            self.treeWidget.topLevelItem(0).setText(0, _translate("MainWindow", "图片文件"))
            self.treeWidget.topLevelItem(0).child(0).setText(0, _translate("MainWindow", "分组节点"))
            self.treeWidget.topLevelItem(0).child(0).child(0).setText(0, _translate("MainWindow", "图片节点"))
            self.treeWidget.topLevelItem(0).child(1).setText(0, _translate("MainWindow", "分组2"))
            self.treeWidget.topLevelItem(0).child(1).child(0).setText(0, _translate("MainWindow", "图片2"))
            self.treeWidget.setSortingEnabled(__sortingEnabled)
            self.actTree_AddFolder.setText(_translate("MainWindow", "添加目录..."))
            self.actTree_AddFolder.setToolTip(_translate("MainWindow", "添加目录"))
            self.actTree_AddFolder.setShortcut(_translate("MainWindow", "Ctrl+F"))
            self.actTree_AddFiles.setText(_translate("MainWindow", "添加文件..."))
            self.actTree_AddFiles.setToolTip(_translate("MainWindow", "添加文件"))
            self.actTree_AddFiles.setShortcut(_translate("MainWindow", "Ctrl+N"))
            self.actZoomIn.setText(_translate("MainWindow", "放大"))
            self.actZoomIn.setToolTip(_translate("MainWindow", "放大图片"))
            self.actZoomIn.setShortcut(_translate("MainWindow", "Ctrl+I"))
            self.actZoomOut.setText(_translate("MainWindow", "缩小"))
            self.actZoomOut.setToolTip(_translate("MainWindow", "缩小图片"))
            self.actZoomOut.setShortcut(_translate("MainWindow", "Ctrl+O"))
            self.actZoomRealSize.setText(_translate("MainWindow", "实际大小"))
            self.actZoomRealSize.setToolTip(_translate("MainWindow", "图片实际大小显示"))
            self.actTree_DeleteItem.setText(_translate("MainWindow", "删除节点"))
            self.actTree_DeleteItem.setToolTip(_translate("MainWindow", "删除节点"))
            self.actZoomFitH.setText(_translate("MainWindow", "适合高度"))
            self.actZoomFitH.setToolTip(_translate("MainWindow", "适合高度"))
            self.actZoomFitH.setShortcut(_translate("MainWindow", "Ctrl+H"))
            self.actZoomFitW.setText(_translate("MainWindow", "适合宽度"))
            self.actZoomFitW.setToolTip(_translate("MainWindow", "适合宽度"))
            self.actZoomFitW.setShortcut(_translate("MainWindow", "Ctrl+W"))
            self.actTree_ScanItems.setText(_translate("MainWindow", "遍历节点"))
            self.actTree_ScanItems.setToolTip(_translate("MainWindow", "遍历节点"))
            self.actDockFloat.setText(_translate("MainWindow", "窗体浮动"))
            self.actDockFloat.setToolTip(_translate("MainWindow", "窗体浮动"))
            self.actDockVisible.setText(_translate("MainWindow", "窗体可见"))
            self.actDockVisible.setToolTip(_translate("MainWindow", "窗体可见"))
            self.actClose.setText(_translate("MainWindow", "退出"))
            self.actClose.setToolTip(_translate("MainWindow", "退出"))
    View Code

    myMainWindow_TreeWidget.py

    #!/usr/bin/env python
    # _*_ coding: UTF-8 _*_
    """=================================================
    @Project -> File    : Operate-system -> myMainWindow_QtreeWidget.py
    @IDE     : PyCharm
    @Author  : zihan
    @Date    : 2020/4/17 8:50
    @Desc    :
    ================================================="""
    
    import sys
    from PyQt5.QtWidgets import QApplication, QMainWindow, QTreeWidgetItem, QLabel, QFileDialog, QDockWidget
    from enum import Enum
    from PyQt5.QtGui import QIcon, QPixmap
    from PyQt5.QtCore import pyqtSlot, Qt, QDir, QFileInfo
    from ui_TreeWidget import Ui_MainWindow
    
    
    # 节点类型的枚举类型
    class TreeItemType(Enum):
        itTopItem = 1001  # 顶层节点
        itGroupItem = 1002  # 分组节点
        itImageItem = 1003  # 图片文件节点
    
    
    class TreeColNum(Enum):  # 目录树的列号的枚举类型
        colItem = 0  # 分组/文件名列
        colItemType = 1  # 节点类型对
    
    
    class QmyMainWindow(QMainWindow):
        def __init__(self, parent=None):
            super().__init__(parent)
            self.ui = Ui_MainWindow()
            self.ui.setupUi(self)
    
            self.curPixmap = QPixmap()  # 图片
            self.pixRatio = 1  # 显示比例
            #  节点标志
            self.itemFlags = Qt.ItemIsSelectable|Qt.ItemIsUserCheckable|Qt.ItemIsEnabled|Qt.ItemIsAutoTristate
            self.setCentralWidget(self.ui.scrollArea)
    
            self.__iniTree()
    
            # 添加目录节点
            self.ui.actTree_AddFolder.triggered.connect(self.do_act_tree_add_folder_triggered)
            # 添加文件节点
            self.ui.actTree_AddFiles.triggered.connect(self.do_act_tree_add_file_triggered)
            # 删除节点
            self.ui.actTree_DeleteItem.triggered.connect(self.do_act_zoom_delete_item_triggered)
            # 遍历节点
            self.ui.actTree_ScanItems.triggered.connect(self.do_act_tree_scan_item_triggered)
            # 目录树上当前节点变化时
            self.ui.treeWidget.currentItemChanged.connect(self.do_tree_widget_current_item_changed)
    
            # 适应高度显示图片
            self.ui.actZoomFitH.triggered.connect(self.do_act_zoom_fith_triggerd)
            # 适应宽度显示图片
            self.ui.actZoomFitW.triggered.connect(self.do_act_zoom_fitw_triggered)
            # 放大显示
            self.ui.actZoomIn.triggered.connect(self.do_act_zoom_in_triggered)
            # 缩小显示
            self.ui.actZoomOut.triggered.connect(self.do_act_zoom_out_triggered)
            # 实际大小
            self.ui.actZoomRealSize.triggered.connect(self.do_act_zoom_realsize_triggered)
            # 设置停靠区浮动性
            self.ui.actDockFloat.triggered.connect(self.do_act_dock_float_triggered)
            # 设置停靠区可见性
            self.ui.actDockVisible.triggered.connect(self.do_act_dock_visible_triggered)
            # 停靠区浮动性改变
            self.ui.dockWidget.topLevelChanged.connect(self.do_dock_widget_toplevelchanged)
            # 停靠区可见性改变
            self.ui.dockWidget.visibilityChanged.connect(self.do_dock_widget_visibilitychanged)
    
        def __iniTree(self):  # 初始化目录树
            self.ui.treeWidget.clear()
            icon = QIcon("./image/icon/pic.jpg")
    
            # 创建节点
            item = QTreeWidgetItem(TreeItemType.itTopItem.value)
            item.setIcon(TreeColNum.colItem.value, icon)
            item.setText(TreeColNum.colItem.value, "图片文件")
            item.setFlags(self.itemFlags)
            item.setCheckState(TreeColNum.colItem.value, Qt.Checked)
            item.setData(TreeColNum.colItem.value, Qt.UserRole, "")
            self.ui.treeWidget.addTopLevelItem(item)
    
        # 添加目录节点
        def do_act_tree_add_folder_triggered(self):
            dirStr = QFileDialog.getExistingDirectory()  # 选择目录
            if dirStr == "":
                return
            parItem = self.ui.treeWidget.currentItem()  # 当前节点
            if parItem is None:
                parItem = self.ui.treeWidget.topLevelItem(0)
            icon = QIcon("./image/icon/AddFolder.jpg")
            dirObj = QDir(dirStr)  # QDir对象
            nodeText = dirObj.dirName()  # 最后一级目录的名称
    
            item = QTreeWidgetItem(TreeItemType.itGroupItem.value)  # 节点类型
            item.setIcon(TreeColNum.colItem.value, icon)
            item.setText(TreeColNum.colItem.value, nodeText)  # 第一列
            item.setText(TreeColNum.colItemType.value, "Group")  # 第二列
            # 设置文字居中
            item.setTextAlignment(TreeColNum.colItemType.value, Qt.AlignCenter)
            item.setFlags(self.itemFlags)
            item.setCheckState(TreeColNum.colItem.value, Qt.Checked)
            item.setData(TreeColNum.colItem.value, Qt.UserRole, dirStr)
            parItem.addChild(item)
            parItem.setExpanded(True)
    
        # 添加文件节点
        def do_act_tree_add_file_triggered(self):
            fileList, flt = QFileDialog.getOpenFileNames(self, "选择一个或多个文件", "", "Images(*.jpg)")
            if len(fileList) < 1:
                return
            item = self.ui.treeWidget.currentItem()  # 当前节点
            if item.type() == TreeItemType.itImageItem.value:
                parItem = item.parent()  # 当前是图片节点
            else:
                parItem = item
    
            icon = QIcon("./image/icon/onepic.jpg")
            for i in range(len(fileList)):
                fullFileName = fileList[i]  # 带路径文件名
                fileinfo = QFileInfo(fullFileName)
                nodeText = fileinfo.fileName()  # 不带路径文件名
                item = QTreeWidgetItem(TreeItemType.itImageItem.value)  # 节点类型
                item.setIcon(TreeColNum.colItem.value, icon)  # 第一列的图标
                item.setText(TreeColNum.colItem.value, nodeText)  # 第一列的文字
                item.setText(TreeColNum.colItemType.value, "Image")  # 第二列的文字
                # 设置文字居中
                item.setTextAlignment(TreeColNum.colItemType.value, Qt.AlignCenter)
                item.setFlags(self.itemFlags)
                item.setCheckState(TreeColNum.colItem.value, Qt.Checked)
                item.setData(TreeColNum.colItem.value, Qt.UserRole, fullFileName)
                parItem.addChild(item)
    
            parItem.setExpanded(True)
    
        # 删除节点
        def do_act_zoom_delete_item_triggered(self):
            item = self.ui.treeWidget.currentItem()
            parItem = item.parent()
            parItem.removeChild(item)
    
        # 遍历节点
        def do_act_tree_scan_item_triggered(self):
            cout = self.ui.treeWidget.topLevelItemCount()
            for i in range(cout):
                item = self.ui.treeWidget.topLevelItem(i)
                self.__changeItemCaption(item)
    
        def __changeItemCaption(self, item):  # 递归调用函数,修改节点标题
            title = "*" + item.text(TreeColNum.colItem.value)
            item.setText(TreeColNum.colItem.value, title)
            if item.childCount() > 0:
                for i in range(item.childCount()):
                    self.__changeItemCaption(item.child(i))
    
        # 当前节点发生变化时
        def do_tree_widget_current_item_changed(self, current, previous):
            if current is None:
                return
            nodeType = current.type()  # 获取节点类型
            if nodeType == TreeItemType.itTopItem.value:
                self.ui.actTree_AddFolder.setEnabled(True)
                self.ui.actTree_AddFiles.setEnabled(True)
                self.ui.actTree_DeleteItem.setEnabled(False)
            elif nodeType == TreeItemType.itGroupItem.value:
                self.ui.actTree_AddFolder.setEnabled(True)
                self.ui.actTree_AddFiles.setEnabled(True)
                self.ui.actTree_DeleteItem.setEnabled(True)
            elif nodeType == TreeItemType.itImageItem.value:
                self.ui.actTree_AddFolder.setEnabled(False)
                self.ui.actTree_AddFiles.setEnabled(True)
                self.ui.actTree_DeleteItem.setEnabled(True)
                self.__displayImage(current)  # 显示图片
    
        def __displayImage(self, item):  # 显示节点item的图片
            filename = item.data(TreeColNum.colItem.value, Qt.UserRole)
            self.ui.statusbar.showMessage(filename)  # 状态栏显示文件名
            self.curPixmap.load(filename)  # 原始图片
            self.do_act_zoom_fith_triggerd()
            self.ui.actZoomFitH.setEnabled(True)
            self.ui.actZoomFitW.setEnabled(True)
            self.ui.actZoomIn.setEnabled(True)
            self.ui.actZoomOut.setEnabled(True)
            self.ui.actZoomRealSize.setEnabled(True)
    
        # 适应高度显示图片
        def do_act_zoom_fith_triggerd(self):
            H = self.ui.scrollArea.height()  # 得到scrollArea的高度
            realH = self.curPixmap.height()  # 原始图片的实际高度
            self.pixRatio = float(H) / realH  # 当前显示比例,必须转换为浮点数
            pix = self.curPixmap.scaledToHeight(H - 30)  # 图片缩放到指定高度
            self.ui.LabPicture.setPixmap(pix)  # 设置Lable的PixMap
    
        # 适应宽度显示图片
        def do_act_zoom_fitw_triggered(self):
            W = self.ui.scrollArea.width() - 20
            realW = self.curPixmap.width()
            self.pixRatio = float(W)/realW
            pix = self.curPixmap.scaledToWidth(W-30)
            self.ui.LabPicture.setPixmap(pix)
    
        # 放大显示
        def do_act_zoom_in_triggered(self):
            self.pixRatio = self.pixRatio * 1.2
            W = self.pixRatio * self.curPixmap.width()
            H = self.pixRatio * self.curPixmap.height()
            pix = self.curPixmap.scaled(W, H)
            self.ui.LabPicture.setPixmap(pix)
    
        # 缩小显示
        def do_act_zoom_out_triggered(self):
            self.pixRatio = self.pixRatio * 0.8
            W = self.pixRatio * self.curPixmap.width()
            H = self.pixRatio * self.curPixmap.height()
            pix = self.curPixmap.scaled(W, H)
            self.ui.LabPicture.setPixmap(pix)
    
        # 实际大小
        def do_act_zoom_realsize_triggered(self):
            self.pixRatio = 1
            self.ui.LabPicture.setPixmap(self.curPixmap)
    
        # 设置停靠区浮动性
        @pyqtSlot(bool)
        def do_act_dock_float_triggered(self, checked):
            self.ui.dockWidget.setFloating(checked)
    
        # 设置停靠区可见性
        @pyqtSlot(bool)
        def do_act_dock_visible_triggered(self, checked):
            self.ui.dockWidget.setVisible(checked)
    
        # 停靠区浮动性改变
        @pyqtSlot(bool)
        def do_dock_widget_toplevelchanged(self, topLevel):
            self.ui.actDockFloat.setChecked(topLevel)
    
        # 停靠区可见性改变
        @pyqtSlot(bool)
        def do_dock_widget_visibilitychanged(self, visible):
            self.ui.actDockVisible.setChecked(visible)
    
    
    if __name__ == "__main__":
        app = QApplication(sys.argv)  # 创建app,用QApplication类
        form = QmyMainWindow()
        form.show()
        sys.exit(app.exec_())
    View Code

    ok。

    里面有一个方法,感觉还不错,就是把节点类型和目录树的列号都作为一个类,方便阅读,很清晰。

  • 相关阅读:
    Tomcat配置Solr4.8
    tomcat 、eclipse插件安装、一个机器安装多个tomcat、tomcat闪退的问题解决
    细节!重点!易错点!--面试java基础篇(二)
    细节!重点!易错点!--面试java基础篇(一)
    如何解决JavaWeb乱码问题
    HTTP协议--简析
    asp.net下利用MVC模式实现Extjs表格增删改查
    8大排序算法图文讲解 分类: Brush Mode 2014-08-18 11:49 78人阅读 评论(0) 收藏
    JAVA swing中JPanel如何实现分组框的效果以及设置边框颜色 分类: Java Game 2014-08-16 12:21 198人阅读 评论(0) 收藏
    java 解决JFrame不能设置背景色的问题 分类: Java Game 2014-08-15 09:48 119人阅读 评论(0) 收藏
  • 原文地址:https://www.cnblogs.com/smart-zihan/p/12739106.html
Copyright © 2020-2023  润新知