QT教程4:基本窗口实现

一、PyQt5 简单案例

这是一个显示小窗口的简单示例。然而,我们可以用这个窗口做很多事情。我们可以调整它的大小、最大化或最小化它。这需要大量的编码。有人已经编写了这个功能。因为它在大多数应用程序中都是重复的,所以不需要重新编码。 PyQt5 是一个高级工具包。如果我们在较低级别的工具包中编码,下面的代码示例很容易有数百行。

simple.py

#!/usr/bin/python
 
"""
ZetCode PyQt5 tutorial
In this example, we create a simple
window in PyQt5.
Author: Jan Bodnar
Website: zetcode.com
"""
 
import sys
from PyQt5.QtWidgets import QApplication, QWidget
 
 
def main():
 
    app = QApplication(sys.argv)
 
    w = QWidget()
    w.resize(250, 150)
    w.move(300, 300)
    w.setWindowTitle('Simple')
    w.show()
 
    sys.exit(app.exec_())
 
 
if __name__ == '__main__':
    main()

上面的代码示例在屏幕上显示了一个小窗口。

CSDN QT技术文章推荐:Qt开发必备技术栈学习路线和资料

import sys

from PyQt5.QtWidgets import QApplication, QWidget

在这里,我们提供必要的导入。基本小部件位于 in PyQt5.QtWidgets 模块内

app = QApplication(sys.argv)

每个 PyQt5 应用程序都必须创建一个应用程序对象。 sys.argv 参数是来自命令行的参数列表。 Python 脚本可以从 shell 运行。这是我们控制脚本启动的一种方式。

w = QWidget()

QWidget 小部件是 PyQt5 中所有用户界面对象的基类。我们为 QWidget 提供默认构造函数。默认构造函数没有父级。没有父级的小部件称为窗口。

w.resize(250, 150)

resize 方法调整小部件的大小。它宽 250 像素,高 150 像素。

w.move(300, 300)

move 方法将小部件移动到屏幕上 x=300, y=300 坐标处的位置。

w.setWindowTitle('Simple')

我们使用 setWindowTitle 设置窗口的标题。标题显示在标题栏中。

w.show()

show 方法在屏幕上显示小部件。小部件首先在内存中创建,然后显示在屏幕上。

sys.exit(app.exec_())

最后,我们进入应用程序的主循环。事件处理从这一点开始。主循环从窗口系统接收事件并将它们分派给应用程序小部件。如果我们调用 exit 方法或主小部件被销毁,则主循环结束。 sys.exit 方法确保干净的退出。环境将被告知应用程序是如何结束的。

exec_ 方法有一个下划线。这是因为 exec 是 Python 关键字。因此,使用了 exec_。

二、为应用加图标

应用程序图标是一个小图像,通常显示在标题栏的左上角。在下面的示例中,我们将展示如何在 PyQt5 中执行此操作。我们还将介绍一些新方法。

某些环境不会在标题栏中显示图标。我们需要启用它们。如果您没有看到任何图标,请参阅我在 Stackoverflow 上的答案以获取解决方案。

icon.py

#!/usr/bin/python
 
"""
ZetCode PyQt5 tutorial
This example shows an icon
in the titlebar of the window.
Author: Jan Bodnar
Website: zetcode.com
"""
 
import sys
from PyQt5.QtWidgets import QApplication, QWidget
from PyQt5.QtGui import QIcon
 
 
class Example(QWidget):
 
    def __init__(self):
        super().__init__()
 
        self.initUI()
 
 
    def initUI(self):
 
        self.setGeometry(300, 300, 300, 220)
        self.setWindowTitle('Icon')
        self.setWindowIcon(QIcon('web.png'))
 
        self.show()
 
 
def main():
 
    app = QApplication(sys.argv)
    ex = Example()
    sys.exit(app.exec_())
 
 
if __name__ == '__main__':
    main()

前面的示例以程序样式进行编码。 Python 编程语言支持过程和面向对象的编程风格。在 PyQt5 中编程意味着在 OOP 中编程。

class Example(QWidget):

    def __init__(self):
        super().__init__()
        ...

面向对象编程中的三件事是类、数据和方法。在这里,我们创建了一个名为“示例”的新类。 Example 类继承自 QWidget 类。这意味着我们调用了两个构造函数:第一个用于示例类,第二个用于继承类。 super 方法返回 Example 类的父对象,我们调用它的构造函数。 __init__ 方法是 Python 语言中的构造方法。

self.initUI()

 GUI 的创建委托给 initUI 方法。

self.setGeometry(300, 300, 300, 220)
self.setWindowTitle('Icon')
self.setWindowIcon(QIcon('web.png'))

这三个方法都继承自 QWidget 类。 setGeometry 做了两件事:它在屏幕上定位窗口并设置它的大小。前两个参数是窗口的 x 和 y 位置。第三个是宽度,第四个是窗口的高度。事实上,它将调整大小和移动方法结合在一种方法中。最后一个方法设置应用程序图标。为此,我们创建了一个 QIcon 对象。 QIcon 接收到要显示的图标的路径。

def main():

    app = QApplication(sys.argv)
    ex = Example()
    sys.exit(app.exec_())

创建应用程序和示例对象。主循环开始。

 

三、在 PyQt5 中显示工具提示

我们可以为我们的任何小部件提供气球帮助。

tooltip.py

#!/usr/bin/python
 
"""
ZetCode PyQt5 tutorial
This example shows a tooltip on
a window and a button.
Author: Jan Bodnar
Website: zetcode.com
"""
 
import sys
from PyQt5.QtWidgets import (QWidget, QToolTip,
    QPushButton, QApplication)
from PyQt5.QtGui import QFont
 
 
class Example(QWidget):
 
    def __init__(self):
        super().__init__()
 
        self.initUI()
 
 
    def initUI(self):
 
        QToolTip.setFont(QFont('SansSerif', 10))
 
        self.setToolTip('This is a <b>QWidget</b> widget')
 
        btn = QPushButton('Button', self)
        btn.setToolTip('This is a <b>QPushButton</b> widget')
        btn.resize(btn.sizeHint())
        btn.move(50, 50)
 
        self.setGeometry(300, 300, 300, 200)
        self.setWindowTitle('Tooltips')
        self.show()
 
 
def main():
 
    app = QApplication(sys.argv)
    ex = Example()
    sys.exit(app.exec_())
 
 
if __name__ == '__main__':
    main()

在这个例子中,我们展示了两个 PyQt5 小部件的工具提示。

QToolTip.setFont(QFont('SansSerif', 10))

此静态方法设置用于呈现工具提示的字体。我们使用 10pt SansSerif 字体。

self.setToolTip('This is a <b>QWidget</b> widget')

要创建工具提示,我们调用 setTooltip 方法。我们可以使用富文本格式。

btn = QPushButton('Button', self)

btn.setToolTip('This is a <b>QPushButton</b> widget')

我们创建一个按钮小部件并为其设置工具提示。

btn.resize(btn.sizeHint())

btn.move(50, 50)

按钮正在调整大小并在窗口上移动。 sizeHint 方法为按钮提供了推荐的大小。

 CSDN QT技术文章推荐:Qt开发必备技术栈学习路线和资料

四、关闭窗口

关闭窗口的明显方法是单击标题栏上的 x 标记。在下一个示例中,我们将展示如何以编程方式关闭窗口。我们将简要介绍信号和插槽。 以下是我们在示例中使用的 QPushButton 小部件的构造函数。

QPushButton(string text, QWidget parent = None)

文本参数是将显示在按钮上的文本。父级是我们放置按钮的小部件。在我们的例子中,它将是一个 QWidget。应用程序的小部件形成层次结构。在这个层次结构中,大多数小部件都有它们的父级。没有父级的小部件是顶级窗口。

quit_button.py

#!/usr/bin/python
 
"""
ZetCode PyQt5 tutorial
This program creates a quit
button. When we press the button,
the application terminates.
Author: Jan Bodnar
Website: zetcode.com
"""
 
import sys
from PyQt5.QtWidgets import QWidget, QPushButton, QApplication
 
class Example(QWidget):
 
    def __init__(self):
        super().__init__()
 
        self.initUI()
 
 
    def initUI(self):
 
        qbtn = QPushButton('Quit', self)
        qbtn.clicked.connect(QApplication.instance().quit)
        qbtn.resize(qbtn.sizeHint())
        qbtn.move(50, 50)
 
        self.setGeometry(300, 300, 350, 250)
        self.setWindowTitle('Quit button')
        self.show()
 
 
def main():
 
    app = QApplication(sys.argv)
    ex = Example()
    sys.exit(app.exec_())
 
 
if __name__ == '__main__':
    main()

在本例中,我们创建了一个退出按钮。单击按钮后,应用程序终止。

qbtn = QPushButton('Quit', self)

我们创建一个按钮。该按钮是 QPushButton 类的一个实例。构造函数的第一个参数是按钮的标签。第二个参数是父部件。父小部件是示例小部件,它是继承的 QWidget。

qbtn.clicked.connect(QApplication.instance().quit)

PyQt5 中的事件处理系统是使用信号槽机制构建的。如果我们点击按钮,就会发出点击的信号。插槽可以是 Qt 插槽或任何 Python 可调用的。

使用 QApplication.instance 检索的 QCoreApplication,内包含主事件循环——它处理和调度所有事件。 clicked 信号连接到终止应用程序的退出方法。通信是在两个对象之间完成的:发送者和接收者。发送者是按钮,接收者是应用对象。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值