pyqt Pyside6文档基本阅读

1 Your First QtWidgets Application

https://doc.qt.io/qtforpython-6/tutorials/basictutorial/widgets.html
we call app.exec() to enter the Qt main loop and start to execute the Qt code. app.exec()进入到QT的主循环内,并且执行了QT的code。

2 Using a Simple Button

https://doc.qt.io/qtforpython-6/tutorials/basictutorial/clickablebutton.html
Signals and slots is a Qt feature that lets your graphical widgets communicate with other graphical widgets or your python code. Our application creates a button that logs the Button clicked, Hello! message to the python console each time you click it.
signals和slots是QT的特点,作用在widgets上在图形widgets之间沟通

还是必须使用QApplication来运行QT code

The QPushButton has a predefined signal called clicked, which is triggered every time the button is clicked. We’ll connect this signal to the say_hello() function
已经定义好了信号signal叫做clicked,按钮被点击会被触发,connect到被slot装饰的函数say_hello

import sys
from PySide6.QtWidgets import QApplication, QPushButton
from PySide6.QtCore import Slot

@Slot() #装饰器,用来将下方的函数传递到另一个函数(类)Slot内,
def say_hello():
 print("Button clicked, Hello!")

# Create the Qt Application
app = QApplication(sys.argv)
# Create a button, connect it and show it
button = QPushButton("Click me") # 可以点击的按钮
button.clicked.connect(say_hello) # 已经定义好了信号signal叫做clicked,按钮被点击会被触发,connect到被slot装饰的函数say_hello
button.show()
# Run the main Qt loop
app.exec()

3 Signals and Slots

https://doc.qt.io/qtforpython-6/tutorials/basictutorial/signals_and_slots.html#signals-and-slots

Signals更像是开关,slots更像是开关变换的结果

While developing interfaces, you can get a real example by the effect of clicking a button: the ‘click’ will be the signal, and the slot will be what happens when that button is clicked, like closing a window, saving a document, etc.

点击是信号signals,点击以后发生的事件结果就是 slot

和回调函数类似,但是不相同的,所有继承自QObject类的子类,都可以包含Signals and Slots。当状态改变时就可以提交Signals,所有对象使用Signals来沟通,并不需要知道也不关心是否有其他对象接收这个signals,只需要发送signals就行

Slots能被用来接收signals,也就是signals connect到slots。也就是个函数,就像signals不知道是否有其他对象接收信号一样,Slots也不知道是否有signals会Connect到他

一个slots可以绑定到多个signals,也就是多个开关控制同一个灯泡,一个signals可以绑定到多个slots,也就是同一个开关可以控制多个灯泡

存在很多事先定义好的signals和slots,QAbstractButton存在clicked的signals,QLineEdit有一个名叫clear()的slot。可以将clicked信号绑定到clear的slot

connect() returns a QMetaObject.Connection object, which can be used with the disconnect() method to sever the connection.

signals也可以绑定到自由函数,不需要使用装饰器slot

The Signal Class

QtCore.Signal()用来声明类级别的信号signals,提交点击信号 clicked()

from PySide6.QtCore import Qt, Signal
from PySide6.QtWidgets import QWidget
class Button(QWidget):
    clicked = Signal(Qt.MouseButton)
    def mousePressEvent(self, event):
        self.clicked.emit(event.button())

The constructor of Signal takes a tuple or a list of Python types and C types:

signal1 = Signal(int)  # Python types
signal2 = Signal(QUrl)  # Qt Types
signal3 = Signal(int, str, int)  # more than one type
signal4 = Signal((float,), (QDate,))  # optional types

Signal接受name参数,可用来代替变量

signal5 = Signal(int, name='rangeChanged')
rangeChanged.emit(...)

Signal还接受arguments参数,用在QML应用的,用name来指代被提交的变量

The Slot Class

装饰器 @QtCore.Slot(),在Qobject派生的类中指示Slots。Slot会接受参数name和result,result指定返回的类型,name和slot相同。信号signal绑定的函数最好用Slot来装饰,QML注册的QObject类更重要,缺少slot装饰器会触发bug。

通过设定环境变量export QT_LOGGING_RULES=“qt.pyside.libpyside.warning=true”,来检测是否被Slot装饰。

最好不要重载signals和slot,最好不要使用方法签名字符串来指定Signals和Slots

Slots函数应该使用@Slot来装饰

4 Creating a Dialog Application

https://doc.qt.io/qtforpython-6/tutorials/basictutorial/dialog.html

使用基础的部件来构造一个对话框,用编辑区QLineEdit提供姓名,点击按钮显示欢迎句子QPushButton

可以使用PySide6 widgets组件来派生子类,QT提供了布局支持,用来组织不同的组件布局,使用QLineEdit.text()来访问编辑区的文本

# https://doc.qt.io/qtforpython-6/tutorials/basictutorial/dialog.html
import sys
from PySide6.QtWidgets import (QLineEdit, QPushButton, QApplication,
    QVBoxLayout, QDialog)
from PySide6.QtCore import Slot

class Form(QDialog): # 派生类

    def __init__(self, parent=None):
        super(
### PyQtPySide的对比及使用指南 #### 1. 许可证 PyQt采用的是GPL或商业许可证模式,这意味着如果在闭源项目中使用PyQt,则需要购买相应的商业许可证[^2]。相比之下,PySide采用了LGPL许可证,允许其在商业和开源项目中免费使用。 #### 2. 导入语句 两者的语法非常相似,但由于它们分别由不同的团队维护,导入方式略有不同。以下是两种框架的基本导入示例: 对于PyQt5: ```python from PyQt5 import QtWidgets ``` 对于PySide6: ```python from PySide6 import QtWidgets ``` 这种差异主要体现在模块命名空间上[^1]。 #### 3. API兼容性 尽管存在细微差别,但PyQtPySide都提供了对Qt框架的高度一致性的Python绑定。大多数情况下,可以从一种框架切换到另一种框架而无需大幅更改代码逻辑。不过,在信号和槽机制等方面可能存在某些不一致性,需注意调整[^2]。 #### 4. 社区支持与文档 PyQt作为Qt官方推荐的Python绑定方案之一,拥有更广泛且成熟的文档体系以及活跃的社区支持。许多Qt官方教程和示例均以PyQt为基础编写[^3]。虽然PySide文档数量相对较少,但随着其逐渐被更多开发者接受,相关资源也在不断增加。 #### 5. 开发者背景 PyQt系列(包括PyQt5和PyQt6)是由Riverbank Computing开发并维护;而PySide系列(如PySide2和PySide6),则是由Qt公司直接负责开发和支持[^3]。这一区别可能导致两者在未来版本更新频率和技术路线图上的差异。 #### 示例程序:创建简单窗口应用 以下展示了如何利用这两种库来实现相同的功能——即构建一个基本的应用程序主窗体。 ##### 使用PyQt5的例子: ```python import sys from PyQt5.QtWidgets import QApplication, QMainWindow class MainWindow(QMainWindow): def __init__(self): super().__init__() self.setWindowTitle("My App") if __name__ == "__main__": app = QApplication(sys.argv) window = MainWindow() window.show() sys.exit(app.exec_()) ``` ##### 对应于PySide6版本则如下所示: ```python import sys from PySide6.QtWidgets import QApplication, QMainWindow class MainWindow(QMainWindow): def __init__(self): super().__init__() self.setWindowTitle("My App") if __name__ == "__main__": app = QApplication(sys.argv) window = MainWindow() window.show() sys.exit(app.exec()) ``` 可以看到除了`exec()`方法名称的变化外,其余部分几乎完全一致[^2]。 --- ####
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

九是否随机的称呼

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

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

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

打赏作者

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

抵扣说明:

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

余额充值