PyQt5 教程 《第一个项目》

65 篇文章 4 订阅
24 篇文章 0 订阅

导读

目录

导读

PyQt5中的第一个程序

简单的例子

应用程序图标

显示工具提示

关闭一个窗口

Message Box

消息框

屏幕上的中心窗口


PyQt5中的第一个程序

在PyQt5教程的这一部分中,我们学习了一些基本功能。这些示例显示工具提示和图标,关闭窗口,显示消息框并在桌面上居中显示窗口。

简单的例子

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

simple.py
#!/usr/bin/python3
# -*- coding: utf-8 -*-


import sys
from PyQt5.QtWidgets import QApplication, QWidget

if __name__ == '__main__':
    
    app = QApplication(sys.argv)

    w = QWidget()
    w.resize(250, 150)
    w.move(300, 300)
    w.setWindowTitle('Simple')
    w.show()
    
    sys.exit(app.exec_())

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

import sys
from PyQt5.QtWidgets import QApplication, QWidget

在这里,我们提供必要的进口。基本控件位于PyQt5.QtWidgets模块中。

app = QApplication(sys.argv)

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

w = QWidget()

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

w.resize(250,150)

resize()方法调整窗口小部件的大小。它宽250px,高150px。

w.move(300,300)

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

w.setWindowTitle

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

w.show()

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

sys.exit(app.exec_())

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

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

简单

图:simple

应用程序图标

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

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

icon.py
#!/usr/bin/python3
# -*- coding: utf-8 -*-

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()
        
        
if __name__ == '__main__':
    
    app = QApplication(sys.argv)
    ex = Example()
    sys.exit(app.exec_())

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

class Example(QWidget):
    
    def __init__(self):
        super().__init__()
        ...

面向对象编程中的三个重要事项是类,数据和方法。这里我们创建一个名为的新类Example。本Example类从继承QWidget类。这意味着我们调用两个构造函数:第一个用于Example 类,第二个用于继承的类。该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位置。第三个是宽度,第四个是窗口的高度。实际上,它在一种方法中结合了方法resize()move()方法。最后一个方法设置应用程序图标。为此,我们创建了一个 QIcon对象。该QIcon接收要显示的路径,我们的图标。

if __name__ == '__main__':
    
    app = QApplication(sys.argv)
    ex = Example()
    sys.exit(app.exec_()) 

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

图标

图:Icon

显示工具提示

我们可以为任何小部件提供浮窗帮助。

tooltip.py
#!/usr/bin/python3
# -*- coding: utf-8 -*-

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()
        
        
if __name__ == '__main__':
    
    app = QApplication(sys.argv)
    ex = Example()
    sys.exit(app.exec_())

在这个例子中,我们展示了两个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() 方法为按钮提供了建议的大小。

Tooltips

图: Tooltips

关闭一个窗口

关闭窗口的明显方法是单击标题栏上的x标记。在下一个示例中,我们将展示如何以编程方式关闭窗口。我们将简要地触摸信号和插槽。

以下是QPushButton我们在示例中使用的窗口小部件的构造函数。

QPushButton(string text, QWidget parent = None)

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

quitbutton.py
#!/usr/bin/python3
# -*- coding: utf-8 -*-

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, 250, 150)
        self.setWindowTitle('Quit button')    
        self.show()
        
        
if __name__ == '__main__':
    
    app = QApplication(sys.argv)
    ex = Example()
    sys.exit(app.exec_())

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

qbtn = QPushButton('Quit', self)

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

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

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

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

Quit button

图: Quit button

Message Box

消息框

默认情况下,如果我们单击标题栏上的x按钮,QWidget则会关闭。有时我们想要修改此默认行为。例如,如果我们在编辑器中打开了一个文件,我们对其进行了一些更改。我们会显示一个消息框以确认操作。

messagebox.py

#!/usr/bin/python3
# -*- coding: utf-8 -*-


import sys
from PyQt5.QtWidgets import QWidget, QMessageBox, QApplication


class Example(QWidget):
    
    def __init__(self):
        super().__init__()
        
        self.initUI()
        
        
    def initUI(self):               
        
        self.setGeometry(300, 300, 250, 150)        
        self.setWindowTitle('Message box')    
        self.show()
        
        
    def closeEvent(self, event):
        
        reply = QMessageBox.question(self, 'Message',
            "Are you sure to quit?", QMessageBox.Yes | 
            QMessageBox.No, QMessageBox.No)

        if reply == QMessageBox.Yes:
            event.accept()
        else:
            event.ignore()        
        
        
if __name__ == '__main__':
    
    app = QApplication(sys.argv)
    ex = Example()
    sys.exit(app.exec_())

如果我们关闭a QWidgetQCloseEvent 则生成。要修改Widget行为,我们需要重新实现closeEvent()事件处理程序。

reply = QMessageBox.question(self, 'Message',
    "Are you sure to quit?", QMessageBox.Yes | 
    QMessageBox.No, QMessageBox.No)

我们显示一个带有两个按钮的消息框:是和否。第一个字符串出现在标题栏上。第二个字符串是对话框显示的消息文本。第三个参数指定出现在对话框中的按钮组合。最后一个参数是默认按钮。它是最初具有键盘焦点的按钮。返回值存储在reply变量中。

if reply == QtGui.QMessageBox.Yes:
    event.accept()
else:
    event.ignore()  

在这里我们测试返回值。如果我们单击Yes按钮,我们接受导致窗口小部件关闭和应用程序终止的事件。否则我们会忽略close事件。

Message box

图: Message box

屏幕上的中心窗口

以下脚本显示了如何将窗口置于桌面屏幕中心。

center.py

#!/usr/bin/python3
# -*- coding: utf-8 -*-

import sys
from PyQt5.QtWidgets import QWidget, QDesktopWidget, QApplication


class Example(QWidget):
    
    def __init__(self):
        super().__init__()
        
        self.initUI()
        
        
    def initUI(self):               
        
        self.resize(250, 150)
        self.center()
        
        self.setWindowTitle('Center')    
        self.show()
        
        
    def center(self):
        
        qr = self.frameGeometry()
        cp = QDesktopWidget().availableGeometry().center()
        qr.moveCenter(cp)
        self.move(qr.topLeft())
        
        
if __name__ == '__main__':
    
    app = QApplication(sys.argv)
    ex = Example()
    sys.exit(app.exec_())

QDesktopWidget类提供有关用户的桌面信息,包括屏幕尺寸。

self.center()

将窗口居中的代码放在自定义 center()方法中。

qr = self.frameGeometry()

我们得到一个矩形,指定主窗口的几何形状。这包括任何窗框。

cp = QDesktopWidget().availableGeometry().center()

我们弄清楚我们的显示器的屏幕分辨率。从这个决议,我们得到了中心点。

qr.moveCenter(cp)

我们的矩形已经有它的宽度和高度。现在我们将矩形的中心设置为屏幕的中心。矩形的大小不变。

self.move(qr.topLeft())

我们将应用程序窗口的左上角移动到qr矩形的左上角,从而使窗口在屏幕上居中。

  • 4
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值