PyQt4 中的第一个程序

目录 上一篇 下一篇

在 PyQt4 教程的这一部分中,我们将学习一些基本功能。

简单的例子

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

#!/usr/bin/python

"""
ZetCode PyQt4 tutorial 

In this example, we create a simple
window in PyQt4.

author: Jan Bodnar
website: zetcode.com
"""

import sys
from PyQt4 import QtGui


def main():
    
    app = QtGui.QApplication(sys.argv)

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


if __name__ == '__main__':
    main()

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

import sys
from PyQt4 import QtGui

在这里我们提供必要的进口。基本的 GUI 小部件位于QtGui模块中。

app = QtGui.QApplication(sys.argv)

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

w = QtGui.QWidget()

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

w.resize(250, 150)

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

w.move(300, 300)

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

w.setWindowTitle('Simple')

在这里我们设置窗口的标题。标题显示在标题栏中。

w.show()

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

sys.exit(app.exec_())

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

该exec_方法有一个下划线。这是因为exec是 Python 关键字。因此,exec_ 被使用。简单的例子

应用程序图标

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

#!/usr/bin/python

"""
ZetCode PyQt4 tutorial 

This example shows an icon
in the titlebar of the window.

author: Jan Bodnar
website: zetcode.com
"""

import sys
from PyQt4 import QtGui


class Example(QtGui.QWidget):
    
    def __init__(self):
        super(Example, self).__init__()
        
        self.initUI()
        
        
    def initUI(self):
        
        self.setGeometry(300, 300, 250, 150)
        self.setWindowTitle('Icon')
        self.setWindowIcon(QtGui.QIcon('web.png'))        
    
        self.show()
        
        
def main():
    
    app = QtGui.QApplication(sys.argv)
    ex = Example()
    sys.exit(app.exec_())


if __name__ == '__main__':
    main()    

前面的示例是以过程风格编码的。Python 编程语言支持面向过程和面向对象的编程风格。使用 PyQt4 编程意味着使用 OOP 编程。

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

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

self.initUI() 

GUI 的创建委托给该initUI方法。

self.setGeometry(300, 300, 250, 150)
self.setWindowTitle('Icon')
self.setWindowIcon(QtGui.QIcon('web.png'))  

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

def main():
    
    app = QtGui.QApplication(sys.argv)
    ex = Example()
    sys.exit(app.exec_())


if __name__ == '__main__':
    main() 

启动代码已放在main方法中。这是Python 的习惯用法。
图标

显示工具提示

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

#!/usr/bin/python

"""
ZetCode PyQt4 tutorial 

This example shows a tooltip on 
a window and a button

author: Jan Bodnar
website: zetcode.com
"""

import sys
from PyQt4 import QtGui


class Example(QtGui.QWidget):
    
    def __init__(self):
        super(Example, self).__init__()
        
        self.initUI()
        
    def initUI(self):
        
        QtGui.QToolTip.setFont(QtGui.QFont('SansSerif', 10))
        
        self.setToolTip('This is a <b>QWidget</b> widget')
        
        btn = QtGui.QPushButton('Button', self)
        btn.setToolTip('This is a <b>QPushButton</b> widget')
        btn.resize(btn.sizeHint())
        btn.move(50, 50)       
        
        self.setGeometry(300, 300, 250, 150)
        self.setWindowTitle('Tooltips')    
        self.show()
        
def main():
    
    app = QtGui.QApplication(sys.argv)
    ex = Example()
    sys.exit(app.exec_())


if __name__ == '__main__':
    main()

在此示例中,我们显示了两个 PyQt4 小部件的工具提示。

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

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

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

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

btn = QtGui.QPushButton('Button', self)
btn.setToolTip('This is a <b>QPushButton</b> widget')

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

btn.resize(btn.sizeHint())
btn.move(50, 50)   

正在调整按钮的大小并在窗口上移动。该sizeHint 方法给出了按钮的推荐尺寸。
工具提示

关闭窗口

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

下面是我们将在示例中使用的QtGui.QPushButton的构造函数。

QPushButton(string text, QWidget parent = None)

该text参数是将显示在按钮上的文本。这parent是一个我们放置按钮的小部件。在我们的例子中,它将是一个QtGui.QWidget。

#!/usr/bin/python

"""
ZetCode PyQt4 tutorial 

This program creates a quit
button. When we press the button,
the application terminates. 

author: Jan Bodnar
website: zetcode.com
"""

import sys
from PyQt4 import QtGui, QtCore


class Example(QtGui.QWidget):
    
    def __init__(self):
        super(Example, self).__init__()
        
        self.initUI()
        
    def initUI(self):               
        
        qbtn = QtGui.QPushButton('Quit', self)
        qbtn.clicked.connect(QtCore.QCoreApplication.instance().quit)
        qbtn.resize(qbtn.sizeHint())
        qbtn.move(50, 50)       
        
        self.setGeometry(300, 300, 250, 150)
        self.setWindowTitle('Quit button')    
        self.show()
        
def main():
    
    app = QtGui.QApplication(sys.argv)
    ex = Example()
    sys.exit(app.exec_())


if __name__ == '__main__':
    main()

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

from PyQt4 import QtGui, QtCore

QtCore需要模块中的一个对象。因此,我们导入该模块。

qbtn = QtGui.QPushButton('Quit', self)

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

qbtn.clicked.connect(QtCore.QCoreApplication.instance().quit)

PyQt4中的事件处理系统是用信号和槽机制构建的。如果我们点击按钮,clicked就会发出信号。该槽可以是 Qt 槽或任何 Python 可调用槽。包含QtCore.QCoreApplication主事件循环。它处理并分派所有事件。该instance方法为我们提供了它的当前实例。请注意,这QtCore.QCoreApplication是使用QtGui.QApplication. 单击的信号连接到quit 终止应用程序的方法。通信在两个对象之间完成:发送者和接收者。发送者是按钮,接收者是应用程序对象。
退出按钮

留言箱

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

#!/usr/bin/python

"""
ZetCode PyQt4 tutorial 

This program shows a confirmation 
message box when we click on the close
button of the application window. 

author: Jan Bodnar
website: zetcode.com
"""

import sys
from PyQt4 import QtGui


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

        if reply == QtGui.QMessageBox.Yes:
            event.accept()
        else:
            event.ignore()        
        
        
def main():
    
    app = QtGui.QApplication(sys.argv)
    ex = Example()
    sys.exit(app.exec_())


if __name__ == '__main__':
    main()

如果我们关闭一个QtGui.QWidget,就会生成一个QtGui.QCloseEvent。要修改小部件行为,我们需要重新实现closeEvent事件处理程序。

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

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

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

这里我们测试一下返回值。如果单击“是”按钮,我们将接受导致小部件关闭并终止应用程序的事件。否则我们会忽略关闭事件。
消息框

使窗口在屏幕上居中

以下脚本显示了如何使窗口在桌面屏幕上居中。

#!/usr/bin/python

"""
ZetCode PyQt4 tutorial 

This program centers a window 
on the screen. 

author: Jan Bodnar
website: zetcode.com
"""

import sys
from PyQt4 import QtGui


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


if __name__ == '__main__':
    main()     

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

self.center()

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

qr = self.frameGeometry()

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

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

我们计算出显示器的屏幕分辨率。从这个分辨率中,我们得到了中心点。

qr.moveCenter(cp)

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

self.move(qr.topLeft())

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

在 PyQt4 教程的这一部分中,我们介绍了一些基础知识。

目录 上一篇 下一篇

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
pyqt4精彩实例讲解,适合pyqt4初级学习者,经供参考第6行创建了一个 QPush Button对象,并设置它的显示文木为“ Hello Kitty!",由于此处并 没有指定按钮的父窗体,因此以自己作为主窗凵 第7行调用show()方法,显示此按钮。控件被创建时,默认是不显示的,必须调用show() 区数来显示它。 第8行的 connect方法是αt最重要的特征,即信号与槽的机制。当按钮被按下则触发 clicked 信号,与之相连的 APplication对象的槽quit(响应按钮单击信号,执行退出应用程序的操 作。关于信号与槽机制在本实例最后将进行详细的分析。 最后调用 APplication的exec()方法,程序进入消息循环,等待可能输入进行响应。Qt 完成事件处理及显示的工作,并在应用程序退出时返叫exec_Q)的值 最后执行程序即可出现上图所示的对话框,一个简单的 Hello Kitty!例子完成。 信号与槽机制作为αt最重要的特性,提供了任意两个Qt对象之间的通信机制。其,信 号会在某个特定情况或动作下被触发,槽是用于接收并处理信号的函数。例如,要将一个窗 口的变化情况通知给另一个窗口,则一个窗口发送信号,另一个窗口的槽接收此信号并进 行相应的操作,即可实现两个窗∏之间的通信。这比传统的图形化程序采用回调函数的方式 实现对象间通信要简单灵活得多。每个Qt对象都包含预定的信号和槽,当一某一特定事件 发生时,一个信号被发射,与信号相关联的槽则会响应信号完成相应的处理。 信号与槽机制常用的连接方式为 connect(Object1, SIGNAL(signal), Object2, SLOT (slot) signal|为对象 Object1的信号,sot为对象 Object2的槽,Qt的窗口部件都包含若十个预定 义的信号和若干个预定乂的槽。当一个类被继承时,该类的信号和槽也同时被继承。开始人 也可以根据需要定义自己的信号和槽。 信号与槽机制可以有多种连接方式,下图描述了信号与槽的多种可能连接方式。 Object 1 Object 2 signal 1 si巴nall signal 2 SeFa 2 slot 1 slot 1 lot 2 Object 3 signal 2 slot 1 slot 2 个信号可以与另一个信号相连 connect(object1, SIGNAL(signal1),Object2, SIGNAL(signal 1)) 即表示 Object11的信号1发射可以触发 Object2的信号1发射 2.表示一个信号可以与多个槽相连 connect(Object1, SIGNAL(signal2), Object2, SLOT(slot2)) connect(object1, SIGNAL(signal2), Object3. SLOT(slot1) 3表示同一个槽可以响应多个信号 connect(object1, SIGNAL(signal2), Object2, SLOT(slot2)) connect(object3, SIGNAL(signal2),object2, SLOT (slot2)) 注:本文基本上是经过改编的《 Linux窗口程序设计-Qt4精彩实例分析》一书的PyQt4for windows版本 可以这么写: b clicked. connect( app. quit) 这样就少了一些 hardcode的字符串了,更加 pythonic 实例2标准对话框的使用 分类:-PyQ42010-12-0310:342105人阅读评论(2)收藏举报 和人多数操作系统一样, Windows及Linuⅹ都提供了一系列的标准对话框,如文件选择, 字体选择,颜色选择等,这些标准对话框为应用程序提供了一致的观感。Qt对这些标准对 话框都定义了相关的类,这些类让使用者能够很方便地使用标准对话框进行文件,颜色以及 字体的选择。标准对话框在软件设计过程是经常需要使用的。 αt提供的标准对话框除了本实例提到的,还有 QErrorMessage, QInputDialog, QMessage Box, QPrintDialog, QProcess Dialog等,这些标准对话框的使用在本书的后续 部分将会陆续介绍。 本实例主要演示上面几种标准对话框的使用,如下图所示 St andard dialog 文件对话框 颜色对话框 字体对话框 Hello wor1l! 在上图,单击“文件对话框”按钮,会弹出文件选择对话框,选的文件名将显示在右连, 单击“颜色对话栏”按钮,会弹岀颜色选择对话框,选的颜色将显小在右边,单击“字体对话 框”按钮,会弹出字体选择对话框,选的字体将更新右边显示的字符串。 实现代码如下: [python] view plaincopyprint? 1.*-* -coding: utf-8 2. from PyQt4.QtGui import 3. from PyQt4. QtCore import 4. import sys 6.QText Codec. setCodecForTr(QText Codec codec ForName(utf8")) 8 class Standard Dialog(QDialog) 9 10. def init (self, parent=None) 1. super(StandardDialog, self). init (parent) 12 13. self. setWindow Title( Standard Dialog") 14 15. file Push Button= QPush Button(sefr("文件对话恒") 16 colorPushButton= QPush Button( self.tr-色对话框") font PushButton= QPushButton( self.tr("字体对话框") 19 self. fileLine Edit=QLine Edito self. colorFrame=QFrame( 21 self. colorFrame setFrame Shape(QFrame. Box) 22 self. colorFrame.setAutoFillBackground(True 23. self. fontAine Edit=QLine Edit( Hello World! " 24 25 layout=Q GridLayouto 26 layout. addWidget(filePushButton, 0, 0) layout. addWidget(self. fileLineEdit, 0, 1) 28 layout. addWidget(color PushButton, 1, 0) 29 layout. addWidget(self. colorFrame, 1,1) 30. layout. addWidget(fontPush Button, 2,0) layout. addWidget(self. fontLineEdit, 2, 1) 32 33. self. setLayout(layout) 34 35. self connect(filePushButton, SIGNALCclickedo"), self. open File) 36 self connect(colorPushButton, SIGNAL(clicked(), self. open Color) 37. self connect(fontPush Button, SIGNAL(clicked("), self. openFont) 38 39. def open File(self) 40. s=QFile Dialog getOpen FileName(self, Open file dialog","/","Python files( py)") 42. self. fileLineEdit. setText(str(s)) 43 44. def open Color(selt 45 46. c=Q Color Dialog. get Color(Qt. blue 47. if c is Valid(: 48. self. colorFrame. setPalette(QPalette(c)) 49 50. def open Font(self) 51 52 f, ok=QFontDialog getFont 53 if ok. 54 self. fontLineEdit setFont(f) 55 56. app=QApplication(sys. argv) 57 form= StandardDialogo 58 form. showO 69. app. exec O 第6行设定tr方法使用u邯8编码来解析文字。 第13行设置程序的标题。 第15到17行创建各个按钮控件。 第19行创建一个 LIne edit类实例 filelineedit,用米显示选择的文件名。 第20行创建一个 FRame类实例 doorframe,当用户选择不同的颜色时, color frame会 根据用户选择的颜色更新其背景 第23行创建一个 QLine Edit类实例 fontaine edit.,当用户选择不同的字体时, fontaine edit 会根据用户选择的字体更新其内容。 第25到33行将各个控件进行布局 第35到37行将各个按钮的 clicked信号相应的槽进行连接 sottIle(方法是文件对话框按钮的 clicked信号的槽,其 getopenFileName()是 QFileDialog类的一个静态方法,返回用户选择的文件名,如果用户选择取消,则返回一个 空串。函数形式如下: QString getopen FileName(QWidget parent= None, QString caption= QString(, Q String directory = QString(, QString filter= QString(, Options options =0) QString getOpen FileName(QWidget parent None, QString caption QString(, QString directory= QString(), QString filter=QStringo, QString selectedFilter= None, Options options = 0) 调用 getOpen FileName(函数将创建一个模态的文件对话框,如下图所示。 directory参数 指定了默认的目录,如果 directory参数带有文件名,则该文件将是默认选的文件,fter 参数对文件类型走行过滤,只有与过滤器匹配的文件类型才显示, filter可以同时指定多种 过滤方式供用户选择,多种过滤器之间用";"隔开,用广选择的过滤器通过参数 selectedFilter 返回 Open file dialog ②区 查找范围):「本地避盘(:) OMy Book My Doc 我最近的文档yFim @My Hidden aMy Music 桌面 laMy Othe oMy Pic 品 7 Softwa 我的文档 My Study aMy Work 我的电脑 网上邻居 文件名① [打开@)1 文件类型): Python files(,py) 取消 QFileDialog类还提供了类似的其他静态函数,如卜表,通过这些函数,用户可以方使地定 制自己的文件对话框。 静态函数 说明 ge lOpenFilename 获得用户选择的文件名 getsaveFileName 获得用户保存的文件名 getExistingdirectory 获得用户选择的已存在的目录名 getOpenl'ileNames 获得用户选择的文件名列表 slotcolor()函数是颜色对话框按钮 clicked信号的槽。其 decolor()是 QColorDialog的 个静态函数,返回用户选择的颜色值,函数形式如下: QColor Q Dialog getColor(Q Color initial=Qt. white, QWidget parent= None) QColor Q Color Dialog. getColor(QColor, QWidget, QString, Color DialogOptions options 0 调用 getcolor(函数将创建一个模态的颜色对话框,如下图所示。 initial参数指定了默认的 颜色,默认为白色,通过 is valid(可以判断用户选择的颜色是否有效,若用户选择取消, isValid将返回 false Select Font 冈 Font Font style eIze Normal 仿宋GB2312 Normal 华文宋 工 telic 华文仿 Bold 8 华文宋体 Bold italic 9 华文彩云 10 华文新魏 11 华文楷体 12 华文琥珀 华文细黑 1日 文 18 华文隶书 2 2在-1Rnn 4 E£ Eects Sample □ Strikeout 口 nderline AaBblyLr Writing System ty OK[ Cancel slotFont()函数是字体对话框按钮 clicked信号的槽。其 getFont(是 QFontDialog的个 静态函数,返回用户选择的字体,函数形式如下: (QFont, bool) getFont(QFont, QWidget, QString, FontDialogOptions) (QFont, bool) getFont(QFont, QWidget, QString) (QFont, bool) getFont(QFont, QWidget parent= None) (QFont, bool) getFont(QWidget parent = None 调用 getFont()函数将创建个模态的字体对话框,如下图所示。用户选择OK,函数返回(用 户选择的字体True)否则返回(默认字体, False) ■ Select font Font Font styl Size 宋体 Normal 仿宋GB2312 orm 文宋 工taic 华文仿 Bold 8 华文宋体 Bold italic 9 10 华文新魏 11 华文楷体 12 华文琥 华文细 1日 18 华文隶 2 22 宋体-1Rn3n Effects ample □ Strikeout □nler1ine AaBbyyli Writing System Any 匚[caca 实例3各类位置信 分类:-PyQt42010-12-0417:071226人阅读评论()收藏举报 Qt提供了很多关于获取窗体位置及显示区域大小的函数,本实例利用一个简单的对话框显 示窗体的各种位置信息,包括窗体的所在点位置,长,宽信息等。木实例的目的是分析各个 有关位置信息的函数之间的区别,如x(,yO,posO),rect), size(), geometry)等,以及在不同的 情况下应使用哪个函数来获取位置信息。实现的效果如下图

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值