6

作为一个程序的开发者,我们仅仅需要在相应路径通过命令行就可执行那个程序。但是,不懂行的人不理解这个黑框框的东西,陌生领域任何人都没有安全感,所以他们是拒绝接受一个项目仅仅只是通过一个黑框框来执行的。所以GUI窗口呼之而出。

“Life is short (You need Python)”
-- Bruce Eckel

python作为一门快速开发语言,其GUI模块自然也不例外。用python来做GUI的模块、包有:
Tk、wxWidgets、Qt、GTK,本篇文章是学习的是用Qt的PyQt4.(PyQt5只适合Python3.0以上)

本篇文章这样安排:
1:简介
2:PyQt4的安装,配合Pycharm的安装
3:PyQt4一定要知道的基础
4:找到你需要的界面配图和代码
5:深入一个复杂的例子
6:总结

1.简介

1.1.PyQt4能做什么

PyQt是用来创建GUI应用程序的工具包,它把Python和成功的Qt绑定在一起,Qt库是这个星球上最强大的库之一,如果不是最强大的话。PyQt的官方网站是 www.riverbankcomputing.co.uk , 它由 Phil Thompson 开发。
将程序包装在GUI界面里,可以:

  • 将输入通过多种途径如文本框、弹出路径选择等输入到程序里。

  • 将输出通过文本框显示出来

  • 将执行信息如如报错信息、运行进度通过文本框或进度条显示出来

1.2.文章安排

  • 先介绍PyQt4安装和配合Pycharm的使用。

  • 或简要或详细叙述PyQt的必须知道的知识,只有了解、理解、掌握这些才能看懂任何一个PyQt程序代码。

  • 配合大量现成的GUI图形界面的图片,你可以与自己脑子里的效果图对应,迅速找到你需要使用众多PyQt类中的哪一个,并且有实现代码(引用的)。向下面这样,通过链接,快速找到想要的代码。
    QStringList类代码地址

我认为这非常重要,因为作为一个初学者,我们常常遇到这样的困境:

  • 我大概知道我要完成哪些功能,但我不知道怎么画出来。

  • 我能画出来,但我不知道调用什么类去实现,甚至在GOOGLE上找这个类的时候,都不知道用什>么词汇去描述你的界面,略尴尬。

  • 深入一个例子,调用自己的脚本配合GUI界面,写出一个可以展示的程序。

  • 总结一下遇到的坑

1.3.一些好的资源

官网文档:http://pyqt.sourceforge.net/Docs/PyQt4/
也是官方文档PyQt4 APIs http://pyqt.sourceforge.net/Docs/PyQt4/modules.html
zetcode:良心文档每行代码都给解释。http://zetcode.com/gui/pyqt4/
zetcode中文版:http://www.qaulau.com/books/PyQt4_Tutorial/index.html
PyQt4 精彩实例分析:受益很多,本文第4节基本靠它了。http://www.linuxidc.com/Linux/2012-06/63652.htm
一个不错的博客文章:http://blog.csdn.net/a359680405/article/details/45096185
QT参考文档:玩到最后不得不看QT了:http://www.kuqin.com/qtdocument/
QT designer文档:http://doc.qt.io/qt-4.8/designer-manual.html

1.4.引用说明

基本引用了以上资源里面的文章,特别是来源:Linux社区 作者:chumpklutz来源:CSDN 作者:翻滚吧挨踢男

2.PyQt4的安装,配合Pycharm的安装

基本参考了PyQt5+python3+pycharm开发环境配置
首先安装分为两个部分:PyQt包和Pycharm设置
PyQt4包:
下载地址
注意:32位的还是64位的,Python2还是python3
然后将安装路径放入系统路径中去:
变量名:QT_QPA_PLATFORM_PLUGIN_PATH
变量值:C:Python34Libsite-packagesPyQt4plugins
Pycharm配置:
步骤如下文:
http://cristalspring.blog.163.com/blog/static/14432742520156510264082/

3.PyQt4一定要知道的基础

3.1.开发流程:

3.1.1 先在Qt designer里面设计个大概,在Pycharm里面通过通过PyUIC将Qt designer里面的example.ui文件转为example.py文件,  
之后就可以直接使用example.py文件了。
3.1.2 注意example.py只是图形界面静态布局的程序,你还要把你的脚本程序script.py结合进入,所以还需要一个myWindow.py程序  
用来连接example.py和script.py.也就是说在myWindow.py中import exampy;import script.py.
3.1.3 myWindow.py中通常包括对图形布局的一些改动和结合、添加按钮动作、等等使图形界面'活'起来的方法。

3.2.步骤及相关知识

对于这样一个界面:
图片描述

第一步:设计好界面的草图

这里推荐使用Balsamiq Mockups 3
设计如下:
图片描述

第二步:实现这个草图

界面有三种可以选择Dialog、Widget、QMainWindow至于选哪种详细可以见这里:
http://www.qtcentre.org/threads/3465-Difference-between-Dialog-and-widget-and-QMainWindow
http://stackoverflow.com/questions/3298792/whats-the-difference-between-qmainwindow-qwidget-and-qdialog
这里我们使用Widget,其它两种都是由之而来
在上图的草图中,主要有标签、输入框和按钮三种元素,怎样去用代码实现呢?

打开Qt designer,它位于PyQt4的安装包中,具体位置在D:\Program Files\Python\Lib\site-packages\PyQt4

打开后如下图
bVvQgF

可以在左侧选择相应的按钮,仅仅通过拖拽完成草图界面。
然后通过Pycharm转为.py文件,在Pycharm中单击该.ui文件,然后点击图中选项
Center

3.3.主要类介绍

主要类介绍:QtGui Module
主要有两个包:

QtCore

QtCore 模块包括了核心的非GUI功能,该模块用来对时间、文件、目录、各种数据类型、流、网址、媒体类型、线程或进程进行处理。

QtGui

QtGui 模块包括图形化窗口组件和及相关类。包括如按钮、窗体、状态栏、滑块、位图、颜色、字体等等。

总的来说:QtGui负责长得好看,QtCore负责有用。

QtGui举例:
simple.png

# 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
我们在这里进行一些必要的import操作。基本的GUI组件在 QtGui 模块中。

app = QtGui.QApplication(sys.argv)
每个PyQt4程序必须创建一个application对象,application在 QtGui 模块中, sys.argv 参数是命令行中的一组参数。Python脚本可以在shell中运行,这样,我们可以控制脚本的启动。

widget = QtGui.QWidget()
QWidget 窗口组件是PyQt4中所有用户界面对象的基类,我们使用 QWidget 默认的构造,没有父亲。没有父亲的窗口组件称为窗体。

widget.resize(250, 150)
resize() 方法调整了 widget 的大小,宽250像素,高150像素。

widget.setWindowTitle('simple')
这里我们为窗口设置了标题,标题显示在标题栏上。

widget.show()
show() 方法将窗口呈现在屏幕上。

sys.exit(app.exec_())
最后,我们输入应用程序的主事件循环,事件处理从这里开始。主事件循环从窗口系统接收事件并分发到应用程序的窗口组件上。当主事件循环结束,如果我们调用 exit() 方法或者主窗口组件被销毁。 sys.exit() 方法确保干净的退出。将通知环境应用程序是如何结束的。

QtCore举例:
120624071596002.png

import PyQt4.QtGui import *  
from PyQt4.QtCore import *  
import sys  
  
app=QtGui.QApplication(sys.argv)  
b=QPushButton("Hello Kitty!")  
b.show()  
app.connect(b,SIGNAL("clicked()"),app,SLOT("quit()"))  
app.exec_()  
第1行导入PyQt4.QtGui的所有类及模块,包括QApplication,所有Qt图形化应用程序都必须包含此文件,它包含了Qt图形化应用程序的各种资源,基本设置,控制流以及事件处理等。

第5行新创建了一个QApplication对象,每个Qt应用程序都必须有且只有一个QApplication对象,采用sys.argv作为参数,便于程序处理命令行参数。

第6行创建了一个QPushButton对象,并设置它的显示文本为“Hello Kitty!”,由于此处并没有指定按钮的父窗体,因此以自己作为主窗口。

第7行调用show()方法,显示此按钮。控件被创建时,默认是不显示的,必须调用show()函数来显示它。

第8行的connect方法是Qt最重要的特征,即信号与槽的机制。当按钮被按下则触发clicked信号,与之相连的QApplication对象的槽quit()响应按钮单击信号,执行退出应用程序的操作。关于信号与槽机制在本实例最后将进行详细的分析。

最后调用QApplication的exec_()方法,程序进入消息循环,等待可能输入进行响应。Qt完成事件处理及显示的工作,并在应用程序退出时返回exec_()的值。

3.4.信号和事件

3.5.一些经验

4.找到你需要的界面配图和代码

实例1 Hello Kitty!

代码链接

Hello Kitty

实例2 标准对话框的使用

代码链接

图片描述
图片描述
图片描述

实例3 使用标准输入框

代码链接

图片描述图片描述图片描述图片描述图片描述

各种消息框的使用

代码链接

图片描述图片描述图片描述图片描述
图片描述图片描述图片描述

实现QQ抽屉效果

代码链接

图片描述

表格的使用

代码链接

图片描述

使用进度条

代码链接

图片描述图片描述

利用Qt Designer设计一个对话框

代码链接

图片描述图片描述图片描述图片描述
图片描述图片描述图片描述图片描述
图片描述图片描述

在程序中使用Ui

代码链接

图片描述图片描述图片描述图片描述图片描述

基本布局管理

代码链接

图片描述

多文档

代码链接

图片描述图片描述!图片描述图片描述

分割窗口

代码链接

图片描述

停靠窗口

代码链接

图片描述图片描述

堆栈窗口

代码链接

图片描述图片描述

综合布局实例

代码链接

图片描述图片描述图片描述图片描述

可扩展对话框

代码链接

图片描述图片描述

利用QPalette改变控件颜色

代码链接

图片描述

窗体的淡入淡出效果

代码链接

图片描述

不规则窗体

代码链接

图片描述

电子钟

代码链接

图片描述

程序启动画面

代码链接

图片描述

基本QMainWindow主窗口程序

代码链接

图片描述

打印文本

代码链接

图片描述

打印图像

代码链接

图片描述

5.深入一个复杂的例子

6.总结


孙强_dp
145 声望7 粉丝

做一个有趣的人