0%

第一个PyQt5程序

这一节我们学习一些基本的操作。

简单的例子

这是一个简单的例子,用来显示一个小窗口。但是我们可以在这个窗口上做很多东西,我们可以调整大小、最大化或者最小化它,这需要很多代码,不过已经有人编好了代码。由于窗口在大多数应用中都要重复使用,所以就没有必要再重复编码了。PyQt5是一个高级的工具,如果我们使用低级的工具包编码,下面的示例代码很容易就达到几百行。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
#!/usr/bin/python3
# -*- coding: utf-8 -*-

"""
ZetCode PyQt5 tutorial

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

author: Jan Bodnar
website: zetcode.com
last edited: January 2015
"""

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_())

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

1
2
import sys
from PyQt5.QtWidgets import QApplication, QWidget

这里我们进行了必要的导入。基本部件在 PyQt5.QtWidgets 模块中。

注:本教程翻译自http://zetcode.com/gui/pyqt5/

关于PyQT5

PyQT5是来自Digia的Python和QT5应用程序框架绑定的集合。它可用于Python2和Python3。本教程使用Python3。QT库是最强大的GUI库。PyQt5的官方网站是http://www.riverbankcomputing.co.uk/news。PyQt5由Riverbank Computing公司开发。

PyQt5是被作为Python的一系列模块使用的。它包括超过620个类以及6000个函数和方法。它是一个跨平台的工具包,可以运行在所有主流的操作系统上,包括Unix,Windows以及Mac OS。PyQt5具有双重许可。开发者可以选择GPL许可或者商业许可。

PyQt5的类分成了如下几个模块:

  • QtCore

QtCore模块包含除了GUI以外的核心功能。可以用来处理时间、文件以及目录、各种各样的数据类型、流、URL、MIME(Multipurpose Internet Mail Extensions) type、线程或者进程。

  • QtGui

QtGui包含的类用于窗口化的系统集成、事件处理、2D图形、基本图片、字体以及文本。

  • QtWidgets

QtWidgets模块包含的类提供了一组UI元素,可以创建经典的桌面风格用户界面。

  • QtMultimedia

QtMultimedia模块包含处理多媒体内容和连接相机及无线电功能的API类。

  • QtBluetooth

QtBluetooth模块包含的类可以扫描蓝牙设备并与之连接和交互。

  • QtNetwork

QtNetwork模块包含的类用来进行网络编程。这些类使得TCP/IP、UDP客户端和服务端的编程更加容易和便捷。

  • QtPositioning

QtPositioning包含的类使用多种可获得的资源来确定位置,包括卫星、WiFi或文本文件。

  • Enginio

Enginio模块实现了客户端库,用来管理应用程序托管QT云服务。

  • QtWebSockets

QtWebSockets模块中的类实现了WebSocket协议。

  • QtWebKit

QtWebKit包含基于WebKit2库实现的浏览器的类。

  • QtWebKitWidgets

QtWebKitWidgets包含基于WebKit1实现的浏览器的类,用于QtWidgets基础应用程序。

  • QtXml

QtXml包含解析XML文件的类。这个模块提供SAX和DOM API的实现。

  • QtSvg

QtSvg包含显示SVG文件内容的类。Scalable Vector Graphics (SVG) 是一种语言,用XML描述二维图形和图形应用程序

  • QtSql

QtSql包含有关数据库的类。

  • QtTest

QtTest包含的函数可以对PyQt5应用程序进行单元测试。

PyQt4和PyQt5的区别

PyQt5并不向下兼容PyQt4,PyQt5有几个重大变化。

但是将旧代码迁移到新版本并不困难,不同的地方如下:

  • Python模块已经重写。一些模块已经删除(QtScript),另外一些拆分成了子模块(QtGui,QtWebKit)。
  • 引入了一些新的模块,包括 QtBluetooth,QtPositioning,以及Enginio。
  • PyQt5 只支持新风格的信号和槽处理机制。对 SIGNAL() 和 SLOT() 的调用不再支持。
  • PyQt5不再支持任何 Qt v5.0 中废弃或过时的Qt API。

Python

Python 是一个通用的动态的面向对象编程语言。Python语言的设计目的强调程序员的生产力和代码的可读性。Python 最初是由 Guido van Rossum 开发的。第一个版本发布于1991年。Python 结合了 ABC, Haskell, Java, Lisp, Icon 以及 Perl 等语言的优点。Python 是一种高级的、通用的、多平台的解释型语言,它是简单的。它最显著的特性是不再使用分号或者括号。它使用缩进代替。目前主要有两个 Python 分支:Python2.x 和 Python 3.x。Python 3.x 与之前的 Python 版本不兼容。它纠正了语言的一些设计缺陷,并使得语言更加简洁。Python 由世界各地的志愿者维护。Python 是一个开源的软件,对于想要学习编程的人来说,Python 是一个理想的选择。

本教程使用 Python 3.x 版本。

Python 支持多种编程风格,它并不强迫程序员某一个特定的模式。Python支持面向对象和面向过程编程,还支持有限的函数式编程。

Python 的官方网站是 http://python.org/

Perl、Python 和 Ruby 脚本语言被广泛使用。他们有许多相似的地方并且也是竞争对手。

这一章是对 PyQt5 的介绍。

PyQT4的安装依赖于SIP,因此要先安装配置SIP。另外,GUI界面的开发要用到eric,因此也需要配置安装。

系统环境为Win10

安装SIP

  1. 下载SIP源码http://www.riverbankcomputing.com/software/sip/download

  2. 配置SIP。在SIP文件夹下(最好放在Python2.7\Lib\site-packages)。输入:

    python configure.py

由于Windows没有make命令,因此在VS的命令行(使用的VS2015 x86 x64兼容工具提示符)中输入(幸好本机安装了VS2015):

nmake
nmake install

alt text

alt text

安装PyQT4

  1. 下载PyQT4。http://www.riverbankcomputing.com/software/pyqt/download

  2. 配置PyQT4。同样在相应文件夹下输入:

    python configure-ng.py

报错:

Error: Make sure you have a working Qt qmake on your PATH.

然后多方查询,发现应该是需要先安装QT,于是下载QT安装(注册、下载,各种麻烦)

最终由于过程太过繁琐,放弃安装PyQT4。

PyQT5安装

首先安装了Python3,然后使用pip安装:

py -3 -m pip install pyqt5

这里说明一下Python2和Python3的使用方法:

py -2
py -3
安装软件使用
py -* -m pip

Eric6安装与配置

在安装好Python3和PyQT5之后,还需要安装:

py -3 -m pip install qscintilla

然后执行:
py -3 install.py

安装完成之后需要进行配置:

点击编辑器–>API,语言选择Python3,然后从已有API导入,编译API,OK。

但是这里依然有问题:

我创建窗体时提示:

alt text

最终我选择卸载Python3.6,卸载PyQT5.8,重新安装Python3.5,PyQT5.6,而且是直接下载安装包安装。再重新安装Eric6。

但是安装完Eric6又出现问题,直接无法启动,说调试器后端无法启动,百度得知,需要通过管理员权限的命令行提示符来安装。

进入命令行提示符却怎么也无法切换到D盘,最终:

cd /d d:

进入了D盘,安装完了Eric6。

参考链接:

http://pyqt.sourceforge.net/Docs/sip4/installation.html

http://pyqt.sourceforge.net/Docs/PyQt4/installation.html

http://pyqt.sourceforge.net/Docs/PyQt5/installation.html

http://flyfowl.com/2016/08/10/windows%E4%B8%8B%E5%AE%89%E8%A3%85eric6-python-ide.html

https://sourceforge.net/projects/pyqt/files/PyQt5/

在线安装

添加源:

$ sudo add-apt-repository ppa:mystic-mirage/pycharm

安装免费的社区版:

$ sudo apt update
$ sudo apt install pycharm-community

安装收费的专业版:

$ sudo apt update
$ sudo apt install pycharm

事实上,这种方法简单方便,不需要事先安装JDK环境等,一切都会自动安装完成。

方法一

今天本来想用Tkinter做图形界面,可是却提示说没有这个库,于是乎去安装Tkinter,可是又遇到报错:

beizi@beizi-virtual-machine:~$ sudo apt-get install python-tk
[sudo] beizi 的密码: 
E: 无法获得锁 /var/lib/dpkg/lock - open (11: 资源暂时不可用)
E: 无法锁定管理目录(/var/lib/dpkg/),是否有其他进程正占用它?

于是在网上查找解决办法:

ps aux | grep "apt-get"

列出包括apt-get的进程,然后kill掉该进程,重新安装即可。

sudo kill 3213

方法二

删除掉该目录:

sudo rm var/lib/dpkg/lock

根据测试,方法一更为有效。