2 PySide6的基本功能 2.1 创建应用程序

2 PySide6的基本功能

本章将向您介绍PySide6的基础知识,我们将在桌面上开发一个简单的窗口应用程序。我们将添加部件,使用布局来排列它们,并将这些部件与函数连接起来,这样就可以从 GUI 中触发应用程序行为。

2.1 创建应用程序

第一个应用程序的源代码如下所示。

basic/creating_a_window_1.py

from PySide6.QtWidgets import QApplication, QWidget

# Only needed for access to command line arguments
import sys

# You need one (and only one) QApplication instance per application.
# Pass in sys.argv to allow command line arguments for your app.
# If you know you won't use command line arguments QApplication([]) works too.
app = QApplication(sys.argv)

# Create a Qt widget, which will be our window.
window = QWidget()
window.show() # IMPORTANT!!!!! Windows are hidden by default.

# Start the event loop.
app.exec()


# Your application won't reach here until you exit and the event
# loop has stopped.

执行结果

图片

2.1.1 什么是事件循环?

每个Qt应用程序的核心都是QApplication类。每个应用程序都需要一个(也只有一个)QApplication 对象来运行。该对象包含应用程序的事件循环–管理所有用户与图形用户界面交互的核心循环。

图片

与应用程序的每次交互(无论是按键、点击鼠标还是鼠标移动)都会产生一个事件,并将其置于事件队列中。在事件循环中,每次迭代都会对队列进行检查,如果发现等待事件,就会将事件和控件传递给该事件的特定事件处理程序。事件处理程序处理事件,然后将控制权传回事件循环,等待更多事件。每个应用程序只有一个运行中的事件循环。

  • QApplication类
    • QApplication包含Qt事件循环
    • 需要一个QApplication 实例
    • 应用程序会在事件循环中等待,直到有动作
    • 任何时候都只有一个事件循环

2.1.2 QMainWindow

在Qt中,任何部件都可以是窗口。如果将QtWidget替换 QPushButton。在下面的示例中,你将得到一个窗口,其中有一个可按下的按钮。

basic/creating_a_window_2.py

import sys

from PySide6.QtWidgets import QApplication, QPushButton

app = QApplication(sys.argv)

window = QPushButton("Push Me")
window.show()

app.exec()
图片

这很美观,但其实用处不大–你很少需要只有一个控件的用户界面!

不过,Qt 已经为你准备了解决方案–QMainWindow。这是一个预制窗口部件,它提供了许多您在应用程序中会用到的标准窗口功能,包括工具栏、菜单、状态栏、可停靠窗口部件等。

basic/creating_a_window_3.py

from PySide6.QtWidgets import QApplication, QMainWindow

import sys


app = QApplication(sys.argv)

window = QMainWindow()
window.show() # IMPORTANT!!!!! Windows are hidden by default.

# Start the event loop.
app.exec()
图片

如果您想创建自定义窗口,最好的方法是子类化QMainWindow,然后在 init 块中包含窗口的设置。这样,窗口行为就可以自包含了。我们可以添加自己的 QMainWindow 子类–称之为 MainWindow 以保持简单。

basic/creating_a_window_4.py


import sys

from PySide6.QtCore import QSize, Qt
from PySide6.QtWidgets import (
QApplication,
QMainWindow,
QPushButton,
) # <1>


# Subclass QMainWindow to customize your application's main window
class MainWindow(QMainWindow):
def __init__(self):
super().__init__() # <2>

self.setWindowTitle("My App")

button = QPushButton("Press Me!")

# Set the central widget of the Window.
self.setCentralWidget(button) # <3>


app = QApplication(sys.argv)

window = MainWindow()
window.show()

app.exec()
图片

常用的Qt部件总是从QtWidgets名称空间导入。我们必须始终调用 super() 类的 init 方法。使用 .setCentralWidget 将 widget 放在 QMainWindow 中。

在我们的 init 块中,我们首先使用 .setWindowTitle() 来更改主窗口的标题。然后,我们将第一个窗口部件–QPushButton 添加到窗口中间。创建按钮时,您可以输入希望按钮显示的文本。

最后,我们在窗口上调用.setCentralWidget()。

更多参考:http://doc.qt.io/qt-5/widget-classes.html#basic-widget-classes

2.1.3 调整窗口和部件的大小

窗口的大小目前可以自由调整–只要用鼠标抓住任何一个角落,就可以拖动并调整到任何想要的大小。虽然让用户调整应用程序的大小是件好事,但有时您可能希望限制最小或最大尺寸,或将窗口锁定为固定尺寸。

大小是通过 QSize 对象定义的。该对象按顺序接受宽度和高度参数。例如创建一个固定大小为400×300像素的窗口。

basic/creating_a_window_end.py


import sys

from PySide6.QtCore import QSize, Qt
from PySide6.QtWidgets import QApplication, QMainWindow, QPushButton


# Subclass QMainWindow to customize your application's main window
class MainWindow(QMainWindow):
def __init__(self):
super().__init__()

self.setWindowTitle("My App")

button = QPushButton("Press Me!")

self.setFixedSize(QSize(400, 300)) # <1>

# Set the central widget of the Window.
self.setCentralWidget(button)


app = QApplication(sys.argv)

window = MainWindow()
window.show()

app.exec()
图片

还可以调用setminimumsize()和setmaximumsize()分别设置最小和最大尺寸。

声明:文中观点不代表本站立场。本文传送门:https://eyangzhen.com/387053.html

(0)
联系我们
联系我们
分享本页
返回顶部