添加链接
link管理
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接

在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

关闭一个窗口

关闭窗口的明显方法是单击标题栏上的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

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

屏幕上的中心窗口

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

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矩形的左上角,从而使窗口在屏幕上居中。

导读目录导读PyQt5中的第一个程序简单的例子应用程序图标显示工具提示关闭一个窗口Message Box消息框屏幕上的中心窗口PyQt5中的第一个程序在PyQt5教程的这一部分中,我们学习了一些基本功能。这些示例显示工具提示和图标,关闭窗口,显示消息框并在桌面上居中显示窗口。简单的例子这是一个显示小窗口的简单示例。然而,我们可以用这个窗口做很... 使用Qt Creator作为Linux IDE,代替Vim:实现两台Linux电脑远程部署和调试(一台电脑有桌面系统,一台电脑无桌面系统) 使用Qt Creator作为Linux IDE,实现CMake编译和单步调试 在Qt Creator中使用make构建,运行,调试通用C/C++项目 使用Qt Creator作为Linux IDE,实现Nginx和Redis......
想用PyQt5写GUI,但是网上的PyQt5资源太少了,找到一个英文的,翻译一下,和学习PyQt5的同学共勉! (本系列中所有代码在windows7 64位[]/Python 3.4.3 32bit/PyQt GPL v5.5 for Python v3.4 (x32)/eric6-6.0.8下测试通过.) 原本地址:http://zetcode.com/gui/pyqt5/ 本次将介绍一个用 PyQt 框架和 Python 编写的 15 个小型桌面应用程序的合集。 这其中很多应用程序在 learnpyqt 网站上有更详细的讨论。如果你对创建GUI应用程序还不熟悉,可以查看 pyqt5 入门教程。 这个开源项目的地址是:https://github.com/learnpyqt/15-minute-apps App列表 这些 app 将展示 Qt 框架的各个部分,包括高级小部件、多媒体、图形视图
上一节描述了如何在 PyCharm 中添加 PyQt5插件,这节来看一下如何用 PyQt5来写一个最简单的桌面程序。其实用 Python 进行桌面开发,除了 PyQt 以外,当然还有其他别的插件可以实现,不过鉴于之前最熟悉的 Qt 开发,所以接触 Python 之后当然第一时间想用Python 来写 Qt 程序啦,那么,废话不多说,接下来写个最简单的 PyQt5程序。 其实只要配...
1. 前言 刚接触python的时候用pyqt5写了一个报告生成工具,后来回头看了下代码实在是写的太难看了。所有前后台逻辑都放在一个文件当中,非常不利于代码的查看以及画面的修改,每次画面修改后将UI文件转成PY文件后还需要重新将代码复制过去。鉴于此,决定重新写一遍,实现前后台逻辑的分离。 PyQt5 5.8.2 PyQt5-sip ...
PyQt5选项卡控件QTabWidget简介 QTabWidget控件提供了一个选项卡和一个页面区域,默认显示第一个选项卡的页面,通过单击各选项卡可以查看对应的界面,如果在一个窗口中显示的输入字段很多,则可以对这些字段进行拆分,分别放置在不同界面的选项卡中 QTabWidget类中常用的方法
PyQt5是一个用于创建桌面应用程序的Python库,它是基于Qt库的Python绑定。PyQt5提供了丰富的组件和功能,可以用于开发各种类型的桌面应用程序。 以下是一个简单的PyQt5教程,介绍如何使用PyQt5创建一个简单的GUI应用程序: 1. 安装PyQt5库 在终端或命令行中输入以下命令安装PyQt5库: pip install PyQt5 2. 创建GUI窗口 使用Qt Designer创建GUI窗口,在Qt Designer中设计好窗口界面并保存为.ui文件,然后使用pyuic5工具将.ui文件转换为.py文件: pyuic5 ui_file.ui -o py_file.py 在Python代码中导入生成的.py文件并创建窗口: from PyQt5 import QtWidgets, uic class MyApp(QtWidgets.QMainWindow): def __init__(self): super(MyApp, self).__init__() uic.loadUi('ui_file.ui', self) app = QtWidgets.QApplication([]) window = MyApp() window.show() app.exec_() 3. 添加事件处理函数 在Qt Designer中为界面上的控件添加事件处理函数,然后在Python代码中定义相应的函数来处理事件: class MyApp(QtWidgets.QMainWindow): def __init__(self): super(MyApp, self).__init__() uic.loadUi('ui_file.ui', self) self.pushButton.clicked.connect(self.button_clicked) def button_clicked(self): self.label.setText('Hello PyQt5!') 以上是一个简单的PyQt5教程,可以帮助你快速入门PyQt5的使用。
TypeError: '>' not supported between instances of 'str' and 'int' 使用yaml 文件可以 config = yaml.load(f) 需要改成 config = yaml.safe_load(f) YAML 5.1版本后弃用了yaml.load(file)这个用法,因为觉得很不安全,5.1版本之后就修改了需要指定Loader,通过默认加载​​器(FullLoader)禁止执行任意函数,该load函数也变得更加安全