#获得模块、子模块及其所属类的相关信息

前言

     这一段时间想学习一些python 图形界面的东东,经查询资料得知,使用通过PySide6模块使用QT界面 还是比较靠谱的,于是下载安装了PySide6 ,安装很顺利,使用 pip install pyside6 即可。但是发现QT的类包太多了,不知道从何学起,于是就想先了解一下QT包中的相关一些信息,尝试着做出以下界面。踩过的一些坑,也得到了一些经验,在此记录。

        目标:给出一个包模块或一个类,列出其下面的模块、类及函数方法。

一开始想着使用 dir(),发现dir 能显示的均是已经加载过的模块,还是必须在同一个文件中import 过的才可以。试着使用 importlib 动态导入模块,发面 dir 出来的东东不全,几经试验以后来发现 inspect 中的 getmembers() 可以使用。看下图

左边是一个QTreeWidget ,用于树状列表显示模块的相关信息。右边是一个辅助信息展示界面。同时下面的搜索也展示到右边的QListWidget 上面。设置导出功能,可将树状显示的内容按同样的格式保存到文本文件,供模块查询学习。

一、设置图形设计工具

图形界面开发:

使用Qt设计师,安装PySide6 后默认安装了pyside6-designer.exe和pyside6-uic.exe,使用 pycharm 的设置 External Tools 添加设计工具的转换工具。

 pyside6 Designer的设置:

pyside6 Designer:Program:程序是安装的 pyside6-designer.exe

                               Arguments:参数设置$FilePath$,文件全路径

                                工作目录:设置$FileDir$ ,文件目录。

同样对UIC转换工具进行设置:

pyside6 UIC:Program:程序是安装的 pyside6-uic.exe

            Arguments:参数设置$FilePath$ -o $FileDir$\$FileNameWithoutExtension$.py 

            工作目录:设置$FileDir$ ,文件目录。

UIC工具是将图形界面文件转成py文件。

命令行为 uic.exe 文件.ui -o 输出文件全路径.py 。以上设置为同名同目录输出py文件。

设置完成后就可以通过右键菜单打开图形界面设计器。

二、图形界面设计布局

界面很简单,拖拉拽几个按钮,两个单行文本,一个tree Widget, 一个list widget 。主要说明 的是如何布局。

 从图中可以看到,使用了三个横向布局,表单采用一个纵向布局。布局比例可以使用layoutStretch 这个属性去调整。

每个组件一个数字,为占用整体布局的比例。 

这里有个参数 QTreeWidget 的一个属性需要设置隐藏一下:

该属性置为不可见,意思树状视图中 不显示标题栏

三、图形界面运行

界面保存后,使用UIC转成py文件代码 ,如下,由于是机器自动生成的,可读性不是太好,不建议在此文件中直接进行修改。

# -*- coding: utf-8 -*-

################################################################################
## Form generated from reading UI file 'mainui.ui'
##
## Created by: Qt User Interface Compiler version 6.4.0
##
## WARNING! All changes made in this file will be lost when recompiling UI file!
################################################################################

from PySide6.QtCore import (QCoreApplication, QDate, QDateTime, QLocale,
    QMetaObject, QObject, QPoint, QRect,
    QSize, QTime, QUrl, Qt)
from PySide6.QtGui import (QBrush, QColor, QConicalGradient, QCursor,
    QFont, QFontDatabase, QGradient, QIcon,
    QImage, QKeySequence, QLinearGradient, QPainter,
    QPalette, QPixmap, QRadialGradient, QTransform)
from PySide6.QtWidgets import (QApplication, QHBoxLayout, QHeaderView, QLabel,
    QLineEdit, QListWidget, QListWidgetItem, QPushButton,
    QSizePolicy, QSpacerItem, QTreeWidget, QTreeWidgetItem,
    QVBoxLayout, QWidget)

class Ui_myinfo(object):
    def setupUi(self, myinfo):
        if not myinfo.objectName():
            myinfo.setObjectName(u"myinfo")
        myinfo.resize(1011, 622)
        myinfo.setStyleSheet(u"*{\n"
"font: \"Microsoft YaHei UI\";\n"
"font-size:16pt;\n"
"color:rgb(0, 170, 255);\n"
"}\n"
"")
        self.verticalLayout = QVBoxLayout(myinfo)
        self.verticalLayout.setObjectName(u"verticalLayout")
        self.horizontalLayout = QHBoxLayout()
        self.horizontalLayout.setObjectName(u"horizontalLayout")
        self.label = QLabel(myinfo)
        self.label.setObjectName(u"label")

        self.horizontalLayout.addWidget(self.label)

        self.txtInput = QLineEdit(myinfo)
        self.txtInput.setObjectName(u"txtInput")

        self.horizontalLayout.addWidget(self.txtInput)

        self.cmdSubmit = QPushButton(myinfo)
        self.cmdSubmit.setObjectName(u"cmdSubmit")

        self.horizontalLayout.addWidget(self.cmdSubmit)

        self.horizontalSpacer_3 = QSpacerItem(40, 20, QSizePolicy.Expanding, QSizePolicy.Minimum)

        self.horizontalLayout.addItem(self.horizontalSpacer_3)

        self.cmdfile = QPushButton(myinfo)
        self.cmdfile.setObjectName(u"cmdfile")

        self.horizontalLayout.addWidget(self.cmdfile)

        self.horizontalSpacer_2 = QSpacerItem(40, 20, QSizePolicy.Expanding, QSizePolicy.Minimum)

        self.horizontalLayout.addItem(self.horizontalSpacer_2)

        self.horizontalLayout.setStretch(0, 1)
        self.horizontalLayout.setStretch(1, 6)
        self.horizontalLayout.setStretch(2, 1)
        self.horizontalLayout.setStretch(3, 1)
        self.horizontalLayout.setStretch(4, 1)
        self.horizontalLayout.setStretch(5, 1)

        self.verticalLayout.addLayout(self.horizontalLayout)

        self.horizontalLayout_2 = QHBoxLayout()
        self.horizontalLayout_2.setObjectName(u"horizontalLayout_2")
        self.tvInfo = QTreeWidget(myinfo)
        __qtreewidgetitem = QTreeWidgetItem()
        __qtreewidgetitem.setText(0, u"name");
        self.tvInfo.setHeaderItem(__qtreewidgetitem)
        self.tvI
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

元亨贞利

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值