PyQt5中的第一个程序
在PyQt5教程的这一部分中,我们学习了一些基本功能。这些示例显示工具提示和图标,关闭窗口,显示消息框并在桌面上居中显示窗口。
简单的例子
这是一个显示小窗口的简单示例。然而,我们可以用这个窗口做很多事情。我们可以调整它,最大化它或最小化它。这需要大量编码。有人已编码此功能。因为它在大多数应用程序中重复,所以不需要再次编码。PyQt5是一个高级工具包。如果我们将在较低级别的工具包中进行编码,则以下代码示例可能很容易拥有数百行。
#!/usr/bin/python3
# -*- coding: utf-8 -*-
"""
In this example, we create a simple
window in PyQt5.
"""
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_())
上面的代码示例显示了屏幕上的一个小窗口。
<span style="color:#000000">
从PyQt5.QtWidgets 导入sys 导入QApplication,QWidget
</span>
在这里,我们提供必要的进口。基本小部件位于PyQt5.QtWidgets
模块中。
<span style="color:#000000">app = QApplication(sys.argv)
</span>
每个PyQt5应用程序都必须创建一个应用程序对象。该sys.argv
参数是命令行中的参数列表。Python脚本可以从shell运行。这是我们如何控制脚本启动的一种方式。
<span style="color:#000000">w = QWidget()
</span>
该QWidget
窗口小部件是基类中PyQt5所有的用户界面对象。我们提供默认构造函数QWidget
。默认构造函数没有父级。没有父项的窗口小部件称为窗口。
<span style="color:#000000">w.resize(250,150)
</span>
该resize()
方法调整窗口小部件的大小。它宽250px,高150px。
<span style="color:#000000">w.move(300,300)
</span>
该move()
方法将小部件移动到屏幕上x = 300,y = 300坐标处的位置。
<span style="color:#000000">w.setWindowTitle( '简单')
</span>
我们设置窗口的标题setWindowTitle()
。标题显示在标题栏中。
<span style="color:#000000">w.show()
</span>
该show()
方法在屏幕上显示小部件。窗口小部件首先在内存中创建,然后在屏幕上显示。
<span style="color:#000000">sys.exit(app.exec_())
</span>
最后,我们进入应用程序的主循环。事件处理从这一点开始。mainloop从窗口系统接收事件并将它们分派给应用程序小部件。如果我们调用exit()
方法或主窗口小部件被销毁,则mainloop结束。该sys.exit()
方法确保干净的退出。将通知环境应用程序如何结束。
该exec_()
方法有一个下划线。这是因为它exec
是一个Python关键字。因此,exec_()
改为使用。
图:简单
应用程序图标
应用程序图标是一个小图像,通常显示在标题栏的左上角。在下面的示例中,我们将展示如何在PyQt5中执行此操作。我们还将介绍一些新方法。
某些环境不会在标题栏中显示图标。我们需要启用它们。 如果您没有看到任何图标,请参阅我在Stackoverflow上获得解决方案的答案。
icon.py
<span style="color:#000000">#!/ usr / bin / python3
# - * - coding:utf-8 - * -
“”“
这个例子
在窗口的标题栏中显示一个图标。
“”
从PyQt5.QtWidgets
导入系统导入QApplication,QWidget
从PyQt5.QtGui导入QIcon
类示例(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。显示()
if __name__ =='__ main__':
app = QApplication(sys.argv)
ex = Example()
sys.exit(app.exec_())
</span>
前面的示例是以程序样式编写的。Python编程语言支持过程和面向对象的编程风格。PyQt5中的编程意味着在OOP中编程。
<span style="color:#000000">class Example(QWidget):
def __init __(self):
super().__ init __()
...
</span>
面向对象编程中的三个重要事项是类,数据和方法。这里我们创建一个名为的新类Example
。本Example
类从继承QWidget
类。这意味着我们调用两个构造函数:第一个用于Example
类,第二个用于继承的类。该super()
方法返回类的父对象,Example
并调用其构造函数。该__init__()
方法是Python语言中的构造方法。
<span style="color:#000000">self.initUI()
</span>
GUI的创建委托给该initUI()
方法。
<span style="color:#000000">self.setGeometry(
300,300,300,220 )
self.setWindowTitle('Icon')self.setWindowIcon(QIcon('web.png'))
</span>
这三个方法都是从QWidget
类中继承而来的。在setGeometry()
做两件事情:它定位在屏幕上的窗口,并设置其大小。前两个参数是窗口的x和y位置。第三个是宽度,第四个是窗口的高度。事实上,它在一种方法中结合了方法resize()
和move()
方法。最后一个方法设置应用程序图标。为此,我们创建了一个QIcon
对象。该QIcon
接收要显示的路径,我们的图标。
<span style="color:#000000">if __name__ =='__ main__':
app = QApplication(sys.argv)
ex = Example()
sys.exit(app.exec_())
</span>
创建应用程序和示例对象。主循环开始。
图:图标
显示工具提示
我们可以为任何小部件提供气球帮助。
tooltip.py
<span style="color:#000000">#!/ usr / bin / python3
# - * - coding:utf-8 - * -
“”“
此示例显示
窗口和按钮上的工具提示。
“””
进口SYS
从PyQt5.QtWidgets进口(QWidget的,QToolTip,
QPushButton,QApplication的)
从PyQt5.QtGui进口QFont
类示例(QWidget中):
DEF __init __(个体经营):
超().__的init __()
self.initUI( )
def initUI(self):
QToolTip.setFont(QFont('SansSerif',10))
self.setToolTip('这是<b> QWidget </ b>小部件')
btn = QPushButton('Button',self)
btn.setToolTip('这是<b> QPushButton </ b>小部件')
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_ ())
</span>
在这个例子中,我们展示了两个PyQt5小部件的工具提示。
<span style="color:#000000">QToolTip.setFont(QFont('SansSerif',10))
</span>
此静态方法设置用于呈现工具提示的字体。我们使用10pt SansSerif字体。
<span style="color:#000000">self.setToolTip('这是<b> QWidget </ b>小部件')
</span>
要创建工具提示,我们调用该setTooltip()
方法。我们可以使用富文本格式。
<span style="color:#000000">btn = QPushButton('Button',self)
btn.setToolTip('这是<b> QPushButton </ b>小部件')
</span>
我们创建一个按钮小部件并为其设置工具提示。
<span style="color:#000000">btn.resize(btn.sizeHint())
btn.move(50,50)
</span>
正在调整按钮的大小并在窗口上移动。该sizeHint()
方法为按钮提供了建议的大小。
图:工具提示
关上一扇窗户
关闭窗口的明显方法是单击标题栏上的x标记。在下一个示例中,我们将展示如何以编程方式关闭窗口。我们将简要地触摸信号和插槽。
以下是QPushButton
我们在示例中使用的窗口小部件的构造函数。
QPushButton(字符串文本,QWidget parent = None)
该text
参数是将在按钮上显示的文本。这parent
是我们放置按钮的小部件。在我们的例子中,它将是一个QWidget
。应用程序的小部件形成层次结构。在此层次结构中,大多数小部件都有其父级。没有父母的小工具是顶窗。
quitbutton.py
<span style="color:#000000">#!/ usr / bin / python3
# - * - coding:utf-8 - * -
“”“
这个程序创建一个退出
按钮。当我们按下按钮时,
应用程序终止。
“”
从PyQt5.QtWidgets
导入sys 导入QWidget,QPushButton,QApplication
类示例(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_())
</span>
在这个例子中,我们创建一个退出按钮。单击按钮后,应用程序终止。
<span style="color:#000000">qbtn = QPushButton('退出',自我)
</span>
我们创建一个按钮。该按钮是QPushButton
该类的实例。构造函数的第一个参数是按钮的标签。第二个参数是父窗口小部件。父窗口小部件是 Example
窗口小部件,它是QWidget
继承的。
<span style="color:#000000">qbtn.clicked.connect(QApplication.instance()。退出)
</span>
PyQt5中的事件处理系统是使用信号和插槽机制构建的。如果我们点击按钮,clicked
就会发出信号。插槽可以是Qt插槽或任何Python可调用。
QCoreApplication
,检索QApplication.instance()
,包含主事件循环 - 它处理并调度所有事件。点击的信号连接到quit()
终止应用程序的方法。通信在两个对象之间完成:发送方和接收方。发送者是按钮,接收者是应用程序对象。
图:退出按钮
消息框
默认情况下,如果我们单击标题栏上的x按钮,QWidget
则会关闭。有时我们想要修改此默认行为。例如,如果我们在编辑器中打开了一个文件,我们对其进行了一些更改。我们会显示一个消息框以确认操作。
messagebox.py
<span style="color:#000000">#!/ usr / bin / python3
# - * - coding:utf-8 - * -
“”“
当我们点击
应用程序窗口的关闭按钮时,
该程序显示一个确认消息框。
“”
从PyQt5.QtWidgets
导入sys 导入QWidget,QMessageBox,QApplication
类示例(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',
“你确定要退出吗?”,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_())
</span>
如果我们关闭a QWidget
,QCloseEvent
则生成。要修改窗口小部件行为,我们需要重新实现closeEvent()
事件处理程序。
<span style="color:#000000">reply = QMessageBox.question(self,'Message',
“你确定要退出吗?”,QMessageBox.Yes |
QMessageBox.No,QMessageBox.No)
</span>
我们显示一个带有两个按钮的消息框:是和否。第一个字符串出现在标题栏上。第二个字符串是对话框显示的消息文本。第三个参数指定对话框中出现的按钮组合。最后一个参数是默认按钮。它是最初具有键盘焦点的按钮。返回值存储在reply
变量中。
<span style="color:#000000">if reply == QtGui.QMessageBox.Yes:
event.accept()
else:
event.ignore()
</span>
在这里我们测试返回值。如果我们单击Yes按钮,我们接受导致窗口小部件关闭和应用程序终止的事件。否则我们会忽略close事件。
图:消息框
屏幕上的中心窗口
以下脚本显示了我们如何将窗口置于桌面屏幕中心。
center.py
<span style="color:#000000">#!/ usr / bin / python3
# - * - coding:utf-8 - * -
“”“
这个程序
以屏幕为中心。
” “”
导入
from PyQt5.QtWidgets的sys import QWidget,QDesktopWidget,QApplication
类示例(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_())
</span>
本QDesktopWidget
类提供有关用户的桌面信息,包括屏幕尺寸。
<span style="color:#000000">self.center()
</span>
将窗口居中的代码放在自定义 center()
方法中。
<span style="color:#000000">qr = self.frameGeometry()
</span>
我们得到一个矩形,指定主窗口的几何形状。这包括任何窗框。
<span style="color:#000000">cp = QDesktopWidget()。availableGeometry()。center()
</span>
我们弄清楚我们的显示器的屏幕分辨率。从这个决议,我们得到了中心点。
<span style="color:#000000">qr.moveCenter(CP)
</span>
我们的矩形已经有它的宽度和高度。现在我们将矩形的中心设置为屏幕的中心。矩形的大小不变。
<span style="color:#000000">self.move(qr.topLeft())
</span>
我们将应用程序窗口的左上角移动到qr矩形的左上角,从而使窗口在屏幕上居中。
在PyQt5教程的这一部分中,我们在PyQt5中创建了简单的代码示例。