文章说明
这一部分的文章主要是对QT for python tutorials 这个官方教程的翻译,另外标题不作翻译,方便查找原文。用于学习和记录,方便自己查阅。之前提到在ROS环境下搭建qml写的界面,需要用到这部分知识,所以扒了下官方教程。
Qt for python 项目相关
原文介绍见https://wiki.qt.io/Qt_for_Python
这个项目旨在向Qt提供一个完整的Pyside模块接口。
下图是python和Qt兼容性情况
Your First QtWidgets Application
官方教程链接 https://doc.qt.io/qtforpython-6/tutorials/basictutorial/widgets.html
在其他的编程框架中,你都是从传统的“hello world”程序开始接触。这儿有一个简单的样例,用Pyside6写的hello world 窗口应用。
import sys
from PySide6.QtWidgets import QApplication, QLabel
app = QApplication(sys.argv)
label = QLabel("Hello World!")
label.show()
app.exec()
当你执行这段代码,窗口看起来将如下:
对于使用Pyside6实现的一个窗口控件应用而言,你必须总是从PySide6.QtWidgets模块中导入与此控件相近的类。
在导入之后,你需要创建一个QApplication实例。因为Qt可以从命令行接收参数,所以你可以传递一些参数给QApplication对象。大多时候,你可能并不需要传递任何参数,所以你可以让它保持原样(不含参数),也可以使用如下方法:
app = QApplication([])
创建完应用对象之后,还需要创建一个QLabel对象。一个QLabel是一个表现了文本(普通文本或富文本,如html)或者图像的控件:
# This HTML approach will be valid too!
label = QLabel("<font color=red size=40>Hello World!</font>")
注意:创建完标签之后,我们还需要调用它的show()方法来使其显示。
最后,我们调用***app.exe()***来进入Qt主循环,并开始执行Qt代码。
Using a Simple Button
官方教程链接 https://doc.qt.io/qtforpython-6/tutorials/basictutorial/clickablebutton.html
在这个教程,我们将展示如何用Qt for python这个项目处理signals and slots。signals 和slots是Qt的一个特征,它能让你的图形控件和其他的图形控件或者python代码进行交互。接下来这个例子中,我们的应用会创建一个按钮,你每次点击,都会发记录一个消息(Button clicked,Hello)到python控制台。
首先从导入必要的Pyside6类和python sys 模块开始。
import sys
from PySide6.QtWidgets import QApplication, QPushButton
from PySide6.QtCore import Slot
首先创建一个函数记录消息到控制台
# Greetings
@Slot()
def say_hello():
print("Button clicked, Hello!")
注意:@Slot()是一个装饰器,用来标识函数为一个slot(槽),不理解为什么以这种方式实现暂时不重要,但是使用这种方法,可以避免一些不希望发生的行为发生。
现在如之前提到的一样,你需要先创建一个QApplication 对象来运行你的Pyside6代码:
# Create the Qt Application
app = QApplication(sys.argv)
接下来创建一个可点击的按钮,它是一个QPushButton实例。给这个按钮打标签,我们需要传递一个python字符串在创建这个实例时。
# Create a button button = QPushButton("Click me")
在我们显示这个按钮之前,我们需要连接它和记录消息到控制台的函数say_hello()。有两种方法可以实现:使用老的方法和使用新方法。这里示例用新方法,更python化。QPushButton类有一个预定义的信号,叫做clicked,每次该按钮被点击时,该信号都会触发。我们将把这个信号和say_hello函数关联起来:
# Connect the button to the function button.clicked.connect(say_hello)
最后我们显示这个按钮,并进入Qt主循环:
# Show the button button.show() # Run the main Qt loop app.exec()
以下是这个例子的完整代码
#!/usr/bin/python
import sys
from PySide6.QtWidgets import QApplication, QPushButton
from PySide6.QtCore import 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)
button.show()
# Run the main Qt loop
app.exec()