赞
踩
第一章 PySlide6学习 - 基础篇
最近在学习windows上python + QT的开发,这里进行下学习记录。
Qt(读作“cute”)是一个跨平台的C++应用程序开发框架,现在由The Qt Company维护。
Qt提供了丰富的功能和工具,使得开发者可以轻松地创建高性能、可扩展、美观的图形用户界面(GUI)应用程序。除了GUI应用程序开发外,Qt还包括了网络编程、数据库操作、XML处理等功能模块,是一个功能全面的开发工具包。
另外跨平台也是QT的一大特点
PySide6是一种用于开发跨平台桌面应用程序的Python绑定库,它基于Qt框架。
它允许开发人员使用Python语言来创建Qt应用程序,而无需直接使用C++。它提供了对Qt的完整访问,包括Qt的核心模块、GUI组件、多媒体、网络、数据库等功能。
Python的流行
Python作为一种简洁、易学且功能强大的编程语言,得到了广泛的应用和支持。因此,为Python开发者提供与Qt集成的解决方案,可以让他们更方便地利用Qt进行开发。
跨平台需求
随着应用程序的跨平台需求增加,开发人员希望使用一种统一的框架来构建适用于不同操作系统的应用程序。Qt作为一种跨平台的框架,可以满足这个需求,而PySide6为Python开发者提供了访问Qt的方式。
Qt 6的发布
Qt 6是Qt框架的最新版本,带来了许多新功能和改进。为了与Qt 6保持兼容,并提供对最新特性的支持,PySide也进行了升级,并推出了PySide6。
pip install PySide6
这里说明一下,我电脑本身就已经安装了Python 3.9,然后在VsCode上运行pySide6的代码时提示"ModuleNotFoundError: No module named ‘PySide6’" ,之后我执行了pip install PySide6等待Pyside6的包安装好后就可以运行了。
通用的工具,具备很多的插件,还能开发自己的插件。
其中Qt for Python是一个关键插件,该插件提供高亮显示,代码补充,代码检查等辅助功能,我当前也是在VsCode上进行开发
Qt Creator是一款由Qt开发的集成开发环境(IDE),专门用于开发基于Qt框架的跨平台应用程序。
它提供了一系列功能和工具,帮助开发者设计界面、编写代码、调试和部署应用程序。
专门用于Python开发。它提供了丰富的功能和工具
该章主要介绍PySide6中的相关概念,这里面同时包含一些QT中的相关概念。
在Qt中,命名空间是一种用于组织和管理代码的机制。命名空间提供了一种将相关的类、函数和变量组织在一起的方式,以避免命名冲突和提高代码的可读性。
命名空间里的内容比较多,这里我就挑一些自己认为比较常用的记录下,大家有需要的可以去参考链接中详细查看。
Alignment(对齐方式)
对齐方式其实在文本输入中最为常见,比如有个输入框,你输入后文本显示在左边还是中间。
Qt.AlignTop(顶部对齐)/Qt.AlignBottom(底部对齐)/ Qt.AlignVCenter(垂直居中)
Qt.AlignLeft(左对齐)/ Qt.AlignRight(右对齐)/ Qt.AlignHCenter(水平居中)
Focus(聚焦)
聚焦功能我们一般是用在提醒我们当前所选中的内容,例如被聚焦的选项,边框和背景色发生改变等等
Qt.ClickFocus (通过鼠标点击获取焦点) / Qt.NoFocus(不接受焦点) / Qt.WheelFocus(滑轮滚动获取焦点)
Layout(布局)
默认我们都是从左到右进行布局,但是有一些国家如阿拉伯国家他们是从右到左的。
Qt.LeftToRight(从左到右布局) / Qt.LayoutDirectionAuto(自动布局)
WindowModality(模态)
模态就是说当前出现的对话框之类的,你必须操作完了,才能去进行其它操作。
一般就是弹窗,你必须点掉,否则其它的你都没法操作,另外弹窗出现时,其它窗口都是被阻塞的,也就是说其它窗口的程序其实都没有被运行到
Qt.NonModal(非模态,不阻塞其它窗口)\ Qt.WindowModal(阻塞其上窗口的输入) \ Qt.ApplicationModa(阻塞整个应用的输入)
WindowType(窗口类型)
窗口类型不同,往往展现出来的效果也不同,例如window是我们常见的默认窗口,对话框一般叫dialog,这种一般是模态的,Popup是一个弹出式的小窗口。
作为一个框架,Qt 有许多组件,这些组件按组件和模块分布。
其中组件中包含很多模块,模块中包含很多类。
例如,qtbase 组件是包含许多模块(QtCore, QtGui, QtWidgets, QtNetwork 等)的基本组件
你可以在 QtCore 模块里找到像 QFile, QTime, QByteArray 这些类。而通过这些类我们可以创建没有用户据界面的应用程序,并让该应用程序去处理文件,网络连接和正则表达式等
控件在GUI中是一个非常重要的概念,它是组成界面的基本元素,像按键,窗口,输入框,键盘等等这些都属于控件,然后我们在做界面时就是像拼图一样把这些控件给拼起来。
QML(Qt Meta-Object Language)是Qt框架中的一种声明式语言,用于创建用户界面(UI)和应用程序逻辑。它提供了一种简洁、灵活的方式来描述用户界面的结构和行为。
这里其实是类比于JavaScript这种语言了,下面是一段示例代码,其中既有界面展示,又有逻辑控制。
import QtQuick 2.0
Rectangle {
width: 400
height: 300
color: "lightblue"
Text {
anchors.centerIn: parent
text: greetingText
font.pixelSize: 24
color: textColor
}
Timer {
interval: 1000
repeat: true
running: true
onTriggered: {
greetingText = "Hello, World!"
textColor = "red"
}
}
MouseArea {
anchors.fill: parent
onClicked: {
greetingText = "You clicked!"
textColor = "green"
}
}
}
Shiboken Module 是一个用于将 C++ 代码绑定到 Python 的工具。其主要是为了解决 C++ 和 Python 之间的桥接问题,一般情况下用于将你原有的基于C++开发的QT项目转为使用python开发
Qt for Python开发过程中经常会碰到的文件类型有:py, ui, qrc, qml, pyproject
是Python源代码文件的标准扩展名,包含Python编程语言的代码。
import sys
from PySide6.QtWidgets import QApplication, QLabel
app = QApplication(sys.argv)
label = QLabel("Hello World!")
label.show()
app.exec_()
这是Qt项目文件,描述了项目的配置和构建信息,类似于CMakeLists.txt或者Makefile
Qt项目包含文件,用于将通用的构建配置提取到单独的文件中,以便在多个项目中共享
Qt样式表文件,用于定义Qt应用程序的外观和风格,类似于CSS(层叠样式表)文件。
Qt资源文件,用于存储应用程序所需的资源,如图像、文本文件等,可以通过资源文件统一管理这些资源。
(从 a.qrc 文件生成 Python 文件:pyside6-rcc -i resources.qrc -o rc_resources.py)
<!DOCTYPE RCC><RCC version="1.0">
<qresource>
<file>images/quit.png</file>
<file>font/myfont.ttf</file>
</qresource>
</RCC>
这是Qt Designer创建的用户界面文件,它描述了GUI界面的布局和组件。(从.ui文件到.py文件 pyside6-uic -i form.ui -o ui_form.py)
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>MainWindow</class>
<widget class="QMainWindow" name="MainWindow">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>400</width>
<height>300</height>
</rect>
</property>
<property name="windowTitle">
<string>MainWindow</string>
</property>
<widget class="QWidget" name="centralWidget">
...
信号
信号(signal)是一种特殊的成员函数,用于在特定事件发生时向外部发出通知。当对象的内部状态发生变化或特定的操作被触发时,可以通过发射信号来通知其他对象。例如,按钮被点击、文本框内容改变等都可以作为信号发出。
槽
槽(slot)是另一种特殊的成员函数,用于接收信号并进行相应的处理。槽函数可以与一个或多个信号进行连接,当信号被发出时,与之相连接的槽函数会被调用,执行特定的操作或响应特定的事件。
总结
在Qt框架中,信号(signal)和槽(slot)是一种用于处理事件和消息传递的机制。
我理解信号和槽,其实就是对应着事件和事件回调。一般来说就是触发一个事件,然后去执行这个事件对应的回调。
代码示例
def test(self) -> None:
"""说明信号和槽"""
@QtCore.Slot() #标记test_slot()是个槽函数,可以在信号触发时被调用
def test_slot() -> None:#表示返回值为空
if self.label.isVisible():
self.label.setVisible(False)
else:
self.label.setVisible(True)
self.button.clicked.connect(test_slot) # 表示test_slot槽函数绑定了button的click 信号
表明一个函数是否是槽函数,要不要加@QtCore.Slot()标记,取决于我们使用的PySlide版本
较新版本的 PySide6 或 PyQt6 中,可以直接将函数标记为槽函数,而无需使用 @QtCore.Slot() 装饰器
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。