PySide6学习/教程/笔记(二):弹窗小页面

注:本文示例都是从官方文档中找到的,有条件的可以去看一下。

基本结构

首先,我们看一下,Qt应用最简单的结构是什么样。

import sys
from PySide6.QtWidgets import QApplication, QLabel

app = QApplication(sys.argv)
label = QLabel("Hello World!")
label.show()
app.exec()

一行一行解释。

前两行是导入需要使用的包。这个后面再讲。

app = QApplication(sys.argv)

这行代码创建了一个QApplication类的实例。首先什么是QApplication?回答这个问题可能会比较复杂。我们先了解一下PySide6这个包的结构。

在这里插入图片描述
主要就是这三个模块。其中QtCore提供了Qt项目的基础机制,例如信号与槽等等。在QtCore基础上,QtGui提供了有关图形界面的基础操作,比如事件,2d或者3d的表现等等。最后才是真正我们看到的东西——QtWidgets,它包含了所有的组件。

而在上面的例子中,我们知道QApplication是从QtWidgets中导入的,因此它应该属于GUI的组件部分(QtGUI我认为是GUI的机制部分)。

但实际上QApplication并不会创造一个可视化的界面。你可以理解它为一个初始化的地基,它提供了很多初始化的能力,例如使用系统风格或者切换主题等等,详见官方文档QApplication

因此一个Qt的GUI应用都必须要实例一个QApplication,而构造函数中的参数sys.argv并不是必须的,关于sys.argv我看的这篇博客Python中的sys.argv是什么含义。简单的说就是用命令行启动的时候可以传参,实际上写成这两个也没问题。

app = QApplication()
#or
app = QApplication([])

然后是label = QLabel("Hello World!"); label.show();
实例了一个QLabel对象,然后show。哪些组件可以show哪些不能?show又是什么方法?关于这个我们需要了解其父类。
在这里插入图片描述
图中可以看到,QLabel是QWidget的子类,实际上绝大多数都是QWidget的子类,因此可以使用QWidget的show方法。

补充,关于什么是QWidget?我目前的理解是,Qt中实际上只有QWidget这一种容器,然后这个容器里又可以存放其他容器或组件,组件实际上也就是一种特殊的容器。

而show方法是创建一个界面的方法,例如我可以创建多个QLabel,然后全部show,程序运行后就会出现多个界面,每个界面里面有一个label。如下图:
在这里插入图片描述
最后则是app.exec(),也可以写成app.exec_()。在Qt的应用中,实际上运行到这一步,上面创建的QLabel才开始出现

在调试中,走到最后一步,还没有出现GUI界面。原理是,最后一行代码进入循环,直到所有的线程结束(我还不确定),程序结束。

一个更标准的代码结构

python支持面向对象,那我们必须投入面向对象的怀抱啊。
通常来说,一个应用是拥有多个界面类以及一个主函数。
先上示例:

"""PySide6 Active Qt Viewer example"""

import sys
from PySide6.QtAxContainer import QAxSelect, QAxWidget
from PySide6.QtGui import QAction
from PySide6.QtWidgets import (QApplication, QDialog,
    QMainWindow, QMessageBox, QToolBar)


class MainWindow(QMainWindow):

    def __init__(self):
        super().__init__()

        toolBar = QToolBar()
        self.addToolBar(toolBar)
        fileMenu = self.menuBar().addMenu("&File")
        loadAction = QAction("Load...", self, shortcut="Ctrl+L", triggered=self.load)
        fileMenu.addAction(loadAction)
        toolBar.addAction(loadAction)
        exitAction = QAction("E&xit", self, shortcut="Ctrl+Q", triggered=self.close)
        fileMenu.addAction(exitAction)

        aboutMenu = self.menuBar().addMenu("&About")
        aboutQtAct = QAction("About &Qt", self, triggered=qApp.aboutQt)
        aboutMenu.addAction(aboutQtAct)
        self.axWidget = QAxWidget()
        self.setCentralWidget(self.axWidget)

    def load(self):
        axSelect = QAxSelect(self)
        if axSelect.exec() == QDialog.Accepted:
            clsid = axSelect.clsid()
            if not self.axWidget.setControl(clsid):
                QMessageBox.warning(self, "AxViewer", f"Unable to load {clsid}.")


if __name__ == '__main__':
    app = QApplication(sys.argv)
    mainWin = MainWindow()
    availableGeometry = mainWin.screen().availableGeometry()
    mainWin.resize(availableGeometry.width() / 3, availableGeometry.height() / 2)
    mainWin.show()
    sys.exit(app.exec())

效果如下:
在这里插入图片描述

还是一步步来解读代码。

  1. 首先,创建了一个MainWindow类,我们上个示例中展示了两个label,但出现了两个页面,那我想放在一个界面里怎么办?那就需要容器。QMainWindow就是一个容器,我们看一下它的继承关系,就是一个QWidget的子类。
    在这里插入图片描述

然后这个QMainWindow有啥用呢?其实就是内置了一些布局和属性。如图:
在这里插入图片描述
因而在上面的例子中,addToolBar()menuBar()就不难理解。

不过有一个小细节是我之前在思考的,为什么添加工具栏用的是addToolBar()而菜单栏是fileMenu = self.menuBar().addMenu("&File")呢?

因为工具栏可以有零或多个,而菜单栏只有一个。

  1. 再看一下这条语句:fileMenu = self.menuBar().addMenu("&File")
    在这里插入图片描述

给菜单栏添加菜单项可以有三种方式传参,得到QMenu菜单项后,就可以给它添加下拉菜单里的QAction,如图:
在这里插入图片描述

关于QAction,其实看示例也明白它的用处了,最后一个参数trigger用来绑定事件,目前还没了解这个绑定事件的操作有没有用到信号/槽。需要注意的是,QAction属于QtGui包,不属于QtWidgets。

  1. 然后是QAxWidget,例子是在官网找的,目前这一块好像官网给的资料都不多,暂且不表,目前只知道这是一个插件支持ActiveX,应该是用来加载文件的。我后续有时间必定给他解决

  2. 最后是主函数调整窗口大小位置那一块的QScreen,该类一般用于获得屏幕属性,例如屏幕的大小角度颜色深度等等,而availableVirtualGeometry()则是获得屏幕的可用尺寸,一般就是去除了任务栏的尺寸。resize()顾名思义对住窗口改变长宽。

  • 0
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Pyside6和PyQt6都是Python编程语言中用于创建GUI应用程序的工具包。它们都是基于Qt框架构建的,因此具有相似的功能和API。 以下是关于使用Pyside6/PyQt6进行快速开发和实战的一些提示: 1. 学习Qt框架:Qt框架是创建GUI应用程序的基础。学习Qt框架可以帮助你了解Pyside6和PyQt6的工作原理,以及如何使用它们创建GUI应用程序。 2. 学习Python编程语言:Pyside6和PyQt6都是Python编程语言的库。因此,熟悉Python编程语言可以帮助你更好地使用这些库。 3. 使用Qt Designer:Qt Designer是一个可视化工具,可以帮助你轻松创建GUI应用程序的UI。你可以使用Qt Designer创建UI,并将其导入到Pyside6/PyQt6项目中。 4. 学习信号和槽:信号和槽是Pyside6/PyQt6中的重要概念。信号是一个事件,例如按钮单击或文本更改,而槽是响应这些事件的函数。学习如何使用信号和槽可以帮助你创建响应用户操作的GUI应用程序。 5. 阅读文档和示例代码:Pyside6和PyQt6都有详细的文档和示例代码。阅读这些文档和示例代码可以帮助你了解如何使用库中的不同功能和API,并为你的项目提供灵感。 6. 加入社区:Pyside6和PyQt6有活跃的社区和论坛。加入这些社区可以帮助你与其他开发人员交流经验,并得到解决问题的帮助。 总之,使用Pyside6和PyQt6进行快速开发和实战需要学习Qt框架、Python编程语言、Qt Designer、信号和槽等知识,并阅读文档和示例代码。加入社区可以帮助你更好地了解和使用这些库。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值