python之pyqt4的简单窗口布局以及信号和槽

 联系我们     |      2019-12-27 22:18

python之pyqt4的简单窗口布局以及信号和槽(上代码),pythonpyqt4

#-*- coding: utf-8 -*-
import sys
reload(sys)
sys.setdefaultencoding('utf8')
from PyQt4 import QtGui,QtCore

'''app=QtGui.QApplication(sys.argv)
w=QtGui.QWidget()
w.resize(300,250)
w.move(200,100)
w.setWindowTitle('code10')
w.show()
sys.exit(app.exec_())'''
class Index(QtGui.QWidget):
def __init__(self,parent=None):
QtGui.QWidget.__init__(self,parent)
#设置窗口大小和位置
self.setGeometry(600,100,400,650)
#设置窗口名字
self.setWindowTitle(u'code代码')
#设置窗口图标
self.setWindowIcon(QtGui.QIcon('../pic/0321.png'))
#设置窗口提示(代码不起作用)
#self.setToolTip(u'This is a<b>QWidget</b>widget')
#QtGui.QToolTip.setFont(QtGui.QFont('OldEnglish',20))
#创建按钮
quit=QtGui.QPushButton(u'点击关闭',self)
#创建按钮位置
quit.setGeometry(0,0,60,35)
#点击按钮关闭(PyQt4的事件处理系统建立在信号-槽机制之上)
self.connect(quit,QtCore.SIGNAL('clicked()'),QtGui.qApp,QtCore.SLOT('quit()'))
#关闭窗口的方法
def closeEvent(self,event):
#关闭窗口触发closeEvent方法
reply=QtGui.QMessageBox.question(self,u'提示',u"你确定关闭吗?",QtGui.QMessageBox.Yes,QtGui.QMessageBox.No)
#第一个字符串参数提示在消息窗口的标题栏显示,
#第二个字符串参数一对话的形式显示在消息窗口中
#返回的结果被保存在reply变量中
if reply==QtGui.QMessageBox.Yes:
#同意
event.accept()
else:
#忽视
event.ignore()

app=QtGui.QApplication(sys.argv)
index=Index()
index.show()
sys.exit(app.exec_())

#-*- coding: utf-8 -*- import sys reload(sys) sys.setdefaultencoding('utf8') from PyQt4 import Qt...

PyQt4 工具包简介
1.1 关于本指南 这是一个入门级的 PyQt 指南。其目的在于引导读者快速上手 PyQt4 工具包。该指南在 Linux 环境下创建并通过测试。 关于 PyQt PyQt 是用来创建 GUI 应用程序的工具包。它是 Python 编程语言与已获得成功的 Qt 库 的 混 合 体 。 其 中 Qt 库 是 这 个 星 球 上 最 强 大 的 GUI 库 之 一 。 PyQt 的 官 方 网 站 是 它由 Phil Thompson 创建。 PyQt 的实现被视作 Python 的一个模块。它由 300 多个类和接近 6000 个函数与方法构 成。作为一个跨平台的工具包,PyQt 可以在所有主流的操作系统上运行(Unix、Windows、 Mac) 。PyQt 有两种许可,开发者可以在 GPL 和商业许可证之间做出选择。之前,PyQt 的 GPL 许可证只在 Unix 系统上可用,但在 PyQt4 之后,其 GPL 许可证适用于所有支持它的 系统。 因为 PyQt 有大量的类,为便于管理,它们被划分到如下的几个模块中。

QtGui QtNetWork

QtCore QtXml

QtOpenGL QtSql

QtSvg

其中 QtCore 模块包含了核心的非 GUI 功能函数,用于以下方面:日期、文件和目录、 数据结构、数据流、URL、MIME、线程和进程。QtGui 模块则包含了绘图组件以及与绘图 相关的类,比如按钮、窗口、状态栏、工具栏、滑块、位图、颜色、字体等。QtNetWork 模 块包含用于网络编程的类, 用户可以用这些类实现 TCP/IP 和 UDP 的客户端或服务器。 并且 使用这些类会使网络编程更加容易、轻便。QtXml 包含用于处理 XML 文件的类,该模块提 供了 SAX 和 DOM API 两种 XML 文件处理方式的实现。QtSvg 模块包含了用于显示 SVG (可缩放矢量图形,参考 模块 用于渲染使用 OpenGL 库创建的 3D 或 2D 图形。 并且它支持 Qt GUI 库和 OpenGL 库的无缝 结合。QtSql 则库提供了用于操作数据库的类。 1.2 使用 PyQt4 创建入门程序 在本章的 PyQt4 指南中我们将学习一些基本的功能。我们讲解的速度会很慢,就像是 在和一个孩子说话一样。对于一个孩子来说,他迈出的第一步是笨拙迟缓的。同样,对于一 个编程新手来说,他接受新事物的过程也会比较的迟缓。但请谨记,没有愚蠢的人,只有懒 人和人,并且懒人和人之间可以相互转换。 一个简单的示例 下面的示例代码非常简单,它只显示一个小窗口。然而,我们可以对窗口进行的操作却 有很多,比如我们可以修改它的大小、最大化、最小化等。而这些操作却需要大量的代码, 由于这些操作在很多程序中都需要用到, 所以前人已经写好了这些操作的代码。 我们没有必 要一遍一遍的重新编写这些代码,因此这些代码对程序员来说是隐藏的。PyQt 是一个高度
2

抽象的工具包,因此,如果我们使用较底层的工具包来实现相同的功能,下面的示例代码就 会增长很多。 #!/usr/bin/python # simple.py import sys from PyQt4 import QtGui app = QtGui.QApplication(sys.argv) widget = QtGui.QWidget() widget.resize(250, 150) widget.setWindowTitle('simple') widget.show() sys.exit(app.exec_()) ----------------------------------------------------------------------------------------------------------------import sys from PyQt4 import QtGui 这两句用来载入必须的模块。基本的 GUI 窗口部件在 QtGui 模块中。 app = QtGui.QApplication(sys.argv) 每一个 PyQt4 程序都需要有一个 application 对象,application 类包含在 QtGui 模块中。 sys.argv 参数是一个命令行参数列表。 Python 脚本可以从 shell 中执行, 参数可以让我们选择 启动脚本的方式。 widget = QtGui.QWidget() QWidget 部件是 PyQt4 中所有用户界面类的父类。 这里我们使用没有参数的默认构造函 数,它没有继承其它类。我们称没有父类的 widget 为一个 window。
widget.resize(250, 150)

resize()方法可以改变窗口部件的大小, 在这里我们将其设置为 250 像素宽, 像素高。 150
widget.setWindowTitle('simple')

这句用来设置窗口部件的标题,该标题将在标题栏中显示。
widget.show()

show()方法将窗口部件显示在屏幕上。
sys.exit(app.exec_())

最后我们进入该程序的主循环。 事件处理从本行语句开始。 主循环接受事件消息并将其 分发给程序的各个部件。如果调用 exit()或主部件被销毁,主循环就会结束。使用 sys.exit() 方法退出可以确保程序可以完整的结束, 这种情况下系统的环境变量会记录程序是如何退出 的。 也许你会疑惑, 为什么 exec_()方法会有一个下划线。 这是因为 exec 是 Python 的关键字, 为避免冲突,PyQt 使用 exec_()替代。

3

截图:simple

1.3 程序图标

程序图标就是一个小图片,通常显示在程序标题栏的左上角。在以下的示例中,我们将 学习如何在 PyQt 中使用程序图标,另外我们还将学习一些新的方法。 #!/usr/bin/python # icon.py import sys from PyQt4 import QtGui class Icon(QtGui.QWidget): def __init__(self, parent = None): QtGui.QWidget.__init__(self, parent) self.setGeometry(300, 300, 250, 150) self.setWindowTitle('Icon') self.setWindowIcon(QtGui.QIcon('icons/web.png')) app = QtGui.QApplication(sys.argv) icon = Icon() icon.show() sys.exit(app.exec_()) ----------------------------------------------------------------------------------------------------------------上一个示例采用了面向过程的方法编写。 Python 语言同时支持面向过程和面向对象两 种编程方法。PyQt 编程是面向对象的。 class Icon(QtGui.QWidget): def __init__(self, parent = None): QtGui.QWidget.__init__(self, parent) 面向对象编程中最重要的是类、属性和方法。以上代码中,我们创建了一个名为 Icon 的新类,该类继承 QtGui.QWidget 类。因此我们必须调用两个构造函数——Icon 的构造函数
4

和继承类 QtGui.QWidget 类的构造函数。 self.setGeometry(300, 300, 250, 150) self.setWindowTitle('Icon') self.setWindowIcon(QtGui.QIcon('icons/web.png')) setGeometry()方法完成两个功能——设置窗口在屏幕上的位置和设置窗口本身的大小。 它的前两个参数是窗口在屏幕上的 x 和 y 坐标。后两个参数是窗口本身的宽和高。 setWindowIcon()方法用来设置程序图标, 它需要一个 QIcon 类型的对象作为参数。 调用 QIcon 构造函数时,我们需要提供要显示的图标的路径(相对或绝对路径) 。

截图:Icon

1.4 显示提示信息

我们可以为任何窗口部件设置一个气球提示。 #!/usr/bin/python # tooltip.py import sys from PyQt4 import QtGui from PyQt4 import QtCore class Tooltip(QtGui.QWidget): def __init__(self, parent = None): QtGui.QWidget.__init__(self, parent) self.setGeometry(300, 300, 250, 150) self.setWindowTitle('Tooltip') self.setToolTip('This is a <b>QWidget</b> widget') QtGui.QToolTip.setFont(QtGui.QFont('OldEnglish', 10))

5

app = QtGui.QApplication(sys.argv) tooltip = Tooltip() tooltip.show() sys.exit(app.exec_()) ----------------------------------------------------------------------------------------------------------------在本示例中,我们为一个 QWidget 类型的窗口部件设置工具提示。 self.setToolTip('This is a <b>QWidget</b> widget') 要创建工具提示,则需要调用 setToolTip()方法。该方法接受富文本格式的参数。 QtGui.QToolTip.setFont(QtGui.QFont('OldEnglish', 10)) 因为默认的 QToolTip 字体看起来比较糟糕,我们可以通过上面的语句设置想要的字体 和字体大小。

截图:tooltip 关闭窗口 一个显而易见的关闭窗口的方式是单击标题栏右上角的 X 标记。在接下来的示例中, 我们将展示如何用代码来关闭程序,并简要介绍 Qt 的信号和槽机制。 下面是 QPushButton 的构造函数,我们将会在下面的示例中使用它。 QPushButton(string text, QWidget parent = None) text 表示将显示在按钮上的文本。parent 是其对象,用于指定按钮显示在哪个部件中。 在我们的示例中,parent 为是一个 QWidget 对象。 #!/usr/bin/python # quitbutton.py import sys from PyQt4 import QtGui, QtCore class QuitButton(QtGui.QWidget): def __init__(self, parent = None): QtGui.QWidget.__init__(self, parent) self.setGeometry(300, 300, 250, 150) self.setWindowTitle('quitbutton')

6

quit = QtGui.QPushButton('Close', self) quit.setGeometry(10, 10, 60, 35) self.connect(quit, QtCore.SIGNAL('clicked()'), QtGui.qApp, QtCore.SLOT('quit()')) app = QtGui.QApplication(sys.argv) qb = QuitButton() qb.show() sys.exit(app.exec_()) ---------------------------------------------------------------------------------------------------------------quit = QtGui.QPushButton('Close', self) quit.setGeometry(10, 10, 60, 35) 以上两句用来创建一个按钮并将其放在 QWidget 部件上,就像我们将 QWidget 部件放 在屏幕上一样。 self.connect(quit, QtCore.SIGNAL('clicked()'), QtGui.qApp,QtCore.SLOT('quit()')) PyQt4 的事件处理系统建立在信号-槽机制之上。如果我们单击 quit 按钮,那么信号 clicked()就会被触发,槽函数可以是 PyQt 自带的槽函数,也可以是任何 Python 可以调用的 函数等。QtCore.QObject.connect()方法可以将信号和槽函数连接起来。在我们的示例中槽函 数是 PyQt 中已定义的 quit()函数。通过 connect 方法就可以建立发送者(quit 按钮)和接受 者(应用程序对象)之间的通信。

截图:quitbutton 消息窗口 默认情况下,如果我们单击了窗口标题栏上的 X 标记,窗口就会被关闭。但是有些时 候我们想要改变这一默认行为。比如,我们正在编辑的文件内容发生了变化,这时若单击 X 标记关闭窗口,编辑器就应当弹出确认窗口。 #!/usr/bin/python # messagebox.py import sys from PyQt4 import QtGui

7

class MessageBox(QtGui.QWidget): def __init__(self, parent = None): QtGui.QWidget.__init__(self, parent) self.setGeometry(300, 300, 250, 150) self.setWindowTitle('message box') def closeEvent(self, event): reply = QtGui.QMessageBox.question(self, 'Message', "Are you sure to quit?", QtGui.QMessageBox.Yes, QtGui.QMessageBox.No) if reply == QtGui.QMessageBox.Yes: event.accept() else: event.ignore() app = QtGui.QApplication(sys.argv) qb = MessageBox() qb.show() sys.exit(app.exec_()) ---------------------------------------------------------------------------------------------------------------如果我们关闭 QWidget 窗口, QCloseEvent 事件就会被触发。 要改变原有的 wdiget 行为 阻止查窗口的关闭,我们就需要重新实现 closeEvent()方法。 reply = QtGui.QMessageBox.question(self, 'Message', "Are you sure to quit?", QtGui.QMessageBox.Yes, QtGui.QMessageBox.No) 通过上面的语句我们可以显示一个带有两个按钮(Yes/No)的消息窗口。第一个字符串 参数'Message'在消息窗口的标题栏显示。第二个字符串参数以对话的形式显示在消息窗口 中。返回的结果被保存在 reply 变量中。 if reply == QtGui.QMessageBox.Yes: event.accept() else: event.ignore() 我们使用上面的 if 语句来判断用户选择的结果。如果用户选择了 Yes 按钮,那么关闭 widget 窗口并终止应用程序的动作会被允许执行。否则,关闭窗口的动作会被忽略。

截图:messagebox

上一篇:没有了 下一篇:使用心得之