PyQt4例子

来源:互联网 发布:淘宝买家版如何开店 编辑:程序博客网 时间:2024/05/16 17:25

在这个部分我们将学习一些PyQt4的基本功能,解释比较慢,就像在对孩子说话。The first steps of a child are awkward, so are the very first attempts of a newbie programmer. 请记住,没有蠢人,There are only lazy people and people, that are not persistent enough.

简单的例子
该代码示例非常简单,仅仅显示一个小窗体,但是我们仍然可以用这个窗体做很多事,我们可以调整其大小、最大化、最小化。这些功能需要大量的代码,不过有人已经编写了这些功能。它们在大多数应用中重复使用,没有必要再次编写这些代码,所以它们被隐藏了起来。PyQt是一个高级的工具包。如果我们在低级的工具包上编写代码,下面的代码示例可能很容易的多出数十行。

#!/usr/bin/python
# simple.py
import sysfrom 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应用程序都必须创建一个应用程序对象,应用程序对象是位于QtGui模块。sys.argv参数是命令行参数列表。Python脚本可以从shell运行,这是一种控制脚本启动的方法。

 widget = QtGui.QWidget()
QWidget的部件是PyQt4中所有在用户界面对象的基类。我们使用了QWidget的默认构造函数。默认的构造函数有没有父类。一个没有父类的部件被称为一个窗体。

widget.resize(250, 150)resize() 方法调整部件的大小,250px宽,150px高。

 widget.setWindowTitle('simple')
设置窗口的标题,标题显示在标题栏中。

widget.show()show()方法在屏幕上显示部件。

 sys.exit(app.exec_())最后,我们进入应用程序的主循环。事件处理从这一点开始,主循环接收来自Windows系统的事件,并且分派到应用程序部件上。如果我们调用exit()方法或主要部件被关闭,主循环结束。sys.exit()方法确保干净的退出。环境变量会报告程序是如何结束的。

你想知道为什么exec_()方法有下划线?任何东西都有其意义。这里显然是因为exec是Python的关键字,因此用exec_()代替。


 
图:simple

 

应用程序图标
应用程序图标是一个小图像,通常是在顶部标题栏的左上角显示。在下面的例子中,我们将展示如何在PyQt4中显示它。同时我们还将介绍一些新的方法。

#!/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编程语言同时支持的面向过程和面向对象的编程风格。在PyQt4上编程意味着面向对象的编程。

 class Icon(QtGui.QWidget):
     def __init__(self, parent=None):
         QtGui.QWidget.__init__(self, parent)
面向对象编程中最重要的三样东西是类、数据和方法。我们创建了一个新的类叫做Icon。Icon类继承自QtGui.QWidget类。这就是说我们必须调用两个构造函数,第一个是Icon类的,第二个是继承类的。

 self.setGeometry(300, 300, 250, 150)
 self.setWindowTitle('Icon')
 self.setWindowIcon(QtGui.QIcon('icons/web.png'))所有这三个类都继承自QtGui.QWidget类。setGeometry()做两件事情,在屏幕上定位窗体,并设置窗体的大小。前两个参数是窗体的X、Y坐标,第三个是窗体的宽度,第四个是窗体的高度。最后一个方法设置应用程序图标,要做到这一点,我们创建了一个QIcon对象。QIcon接受需要显示的图标的路径。


 
图:Icon
 
显示工具提示
我们可以为部件的提供气泡式帮助。

#!/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))


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标志。在下面的例子,我们将展示如何用程序关闭我们的窗体。我们会稍稍接触一下信号(signals)和插槽(slots)。

下面构造了一个将在例子中使用的QPushButton。

   QPushButton(string text, QWidget parent = None)
text参数是在按钮上显示的文本。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('Quit button')

        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中的事件处理系统由信号和插槽机制构成。如果我们按一下按钮,信号clicked()被发送出去。插槽可以是一个PyQt的插槽或任何Python可调用部分。QtCore.QObject.connect()方法将信号连接到插槽。在我们的例子中,插槽是一个预定义的PyQtquit()插槽。这在两个对象(发送者和接收者)间建立了通讯。发送者人是按钮,接收者的应用程序对象。


 
图:quit button
 
消息框
默认情况下,如果我们点击标题栏上的X按钮,QWidget被关闭。有时我们要修改这个默认的行为。举例来说,如果我们在编辑器中打开了一个文件,并做了一些修改,我们就需要显示一个消息框,以确认该操作。

#!/usr/bin/python

# messagebox.py

import sys
from PyQt4 import QtGui


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事件。要修改构件的行为,我们需要重新实现closeEvent()事件处理程序。

 reply = QtGui.QMessageBox.question(self, 'Message',
     "Are you sure to quit?", QtGui.QMessageBox.Yes, QtGui.QMessageBox.No)我们显示一个带有两个按钮的消息框,Yes和No。第一个字符串显示在标题栏中。第二个字符串是对话框显示的消息文本。返回值存储在reply变量中。

 if reply == QtGui.QMessageBox.Yes:
     event.accept()
 else:
    event.ignore()
在这里,我们检查返回值。如果按得是Yes按钮,我们接受了事件,关闭的部件,终止应用程序。否则,忽略close事件。


 
图:message box
 
在屏幕上的对中窗体
下面的脚本演示如何能够在桌面的中心建立一个窗体。

#!/usr/bin/python

# center.py

import sys
from PyQt4 import QtGui


class Center(QtGui.QWidget):
    def __init__(self, parent=None):
        QtGui.QWidget.__init__(self, parent)

        self.setWindowTitle('center')
        self.resize(250, 150)
        self.center()

    def center(self):
        screen = QtGui.QDesktopWidget().screenGeometry()
        size =  self.geometry()
        self.move((screen.width()-size.width())/2, (screen.height()-size.height())/2)


app = QtGui.QApplication(sys.argv)
qb = Center()
qb.show()
sys.exit(app.exec_())
 self.resize(250, 150)
这是调整QWidget到250px宽,150px高。

 screen = QtGui.QDesktopWidget().screenGeometry()
计算出我们的显示器的屏幕分辨率。

 size =  self.geometry()
获得到QWidget的大小。

 self.move((screen.width()-size.width())/2, (screen.height()-size.height())/2)
将窗口移动到屏幕的中心。

 

本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/Wescom/archive/2009/10/25/4727135.aspx

原创粉丝点击