PyQt6入门之创建一个简单的GUI

前言

GUI的设计是为了处理特定的任务,如编写和编辑文档或播放视频。创建任何类型的用户界面似乎都是一项艰巨的任务,需要考虑所有不同的部件。小部件是按钮、复选框、滑块和其他组件,用户使用它们来与GUI进行交互。

为了帮助你了解不同种类的部件,并理解你何时可能想要使用它们,每一章都会利用不同的部件,并将它们应用于一个或多个GUI项目。每当介绍一个新的部件时,你也将在一个较小的实际应用中应用该部件,然后再在较大的GUI中使用它们。对于一些较大的应用程序,我们还将讨论设计和安排应用程序窗口中的小部件的过程。

在本章中,你将 - 开始学习PyQt中的widget,并了解如何在你的GUI中使用它们

  • 考虑一个简单的GUI应用的设计过程
  • 主要用QLabel widget构建基本的GUI
  • 看看如何使用move()方法来组织GUI中的widget

让我们从学习一个非常基本的widget开始。

在上一章中我们学习了如何创建一个窗口后,我们可以继续前进,用部件添加更多的功能。在这一章中,我们将主要关注QLabel的使用,因为它是你在开发几乎每一个GUI中都会用到的部件。QLabel对象作为一个不可编辑的占位符来显示纯文本或富文本、超链接、图像或GIF。它对于在其他部件周围创建标签以指定它们的角色或给予它们标题也很有用。

首先,让我们导入我们需要的模块。为了创建窗口,我们需要从QtWidgets模块中导入另一个PyQt类,QLabel类。

这一次,我们还需要导入QtGui模块。QtGui模块处理GUI中使用的众多图形元素。QPixmap是一个为在屏幕上显示图像而优化的Qt类,对于在QLabel对象上显示图像非常有用。

你需要创建一个继承自QWidget的MainWindow类。接下来,用setGeometry()初始化窗口的大小,用setWindowTitle()设置我们GUI的标题。

注意:Qt充满了大量的类方法,这些方法被称为accessors,也被称为getters,用于检索值,而mutators,也被称为setters,用于改变值。你已经看到了两个setter的例子。要改变一个小组件或部件的大小,你可以使用setter setGeometry()。如果你想在任何时候检索该值,你可以使用getter geometry()。Setter和getter方法在PyQt中遵循这种模式,setter的方法名中有set这个词,而getter则去掉了set这个词,并将第一个字母换成小写。

接下来,调用setUpMainWindow()方法,该方法不仅用于设置和安排主窗口中的小部件,还用于结构化代码。然后我们使用show()方法来显示该窗口。要设置该应用程序,首先创建一个QApplication对象。然后启动该窗口。接下来,使用exec()来开始事件循环。最后,使用sys.exit()来处理安全关闭程序。

接下来要做的是创建MainWindow方法,setUpMainWindow()。

首先,你必须创建一个QLabel对象。通过将self作为参数传递给QLabel,你将MainWindow类设置为标签的父对象。这将有助于在父对象中显示和安排小部件。接下来,使用setText()指定标签的内容。这里,文本被设置为 “Hello World!”。在下面一行,我们使用move()方法在窗口中安排标签。

PyQt有很多布局技术,包括水平布局、网格布局和绝对定位。对于本章中创建的程序,我们将使用绝对定位的move()方法。使用move(),你只需要指定你要放置小部件的x和y像素值。

想象一下,主窗口是一个图形,其左上角是点(0,0)。你在move()中选择的x和y值是指小部件的左上角在主窗口中的位置。对于我们的文本标签,我们指定其值为x=89和y=15。这绝对不是在窗口中安排部件的最佳方法,原因有很多。其一,它很复杂,需要使用试验和错误来设置你的小部件的位置。另一个原因是要处理调整窗口大小的问题。如果你通过拖动右下角来调整窗口的大小,你会发现小部件并没有移动或伸展。Qt的布局类对于处理这个问题和其他问题非常有用。

你可能认为学习使用move()是在浪费时间,但它对了解如何使用像素值来操作部件是非常有用的,特别是当我们开始处理更高级的主题,如动画和图形类。

以类似的方式加载图像,创建一个world_label对象,放在主窗口中。然后我们构造一个图像的QPixmap,并使用setPixmap()来设置显示在world_label上的图像。图像的绝对位置是用move()来设置的。如果找不到图像,则抛出一个异常。

PyQt的每个不同的类都有自己的方法,可以用来定制和改变它们的外观和功能。

示例程序如下:

# labels.py
# Import necessary modules
import sys
from PyQt6.QtWidgets import QApplication, QWidget, QLabel
from PyQt6.QtGui import QPixmap


class MainWindow(QWidget):
    def __init__(self):
        super().__init__()
        self.initializeUI()

    def setUpMainWindwo(self):
        """Create QLabel to be displayed in the main window."""
        hello_label = QLabel(self)
        hello_label.setText("Hello World!")
        hello_label.move(89, 15)

        image = "images/world.png"
        try:
            with open(image):
                world_label = QLabel(self)
                pixmap = QPixmap(image)
                world_label.setPixmap(pixmap)
                world_label.move(25, 40)
        except FileNotFoundError as error:
            print(f"Image not found.\nError: {error}")


    def initializeUI(self):
        """Setup the application's GUI."""
        self.setGeometry(100, 100, 250, 250)
        self.setWindowTitle("QLabel Example")

        self.setUpMainWindwo()
        self.show()


if __name__ == "__main__":
    app = QApplication(sys.argv)
    window = MainWindow()
    sys.exit(app.exec())

运行结果如下

Alt

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值