Designer编写倒计时石英钟,0开支平台

By admin in 4858.com on 2019年4月18日

用 埃里克陆 与 PyQt5结合,非凡有益的落到实处分界面与逻辑分离,满意python的极速GUI编程,你只要求关注程序的逻辑完毕,而不必要在分界面上花不少时光。

【前言】前些天通过编写制定命令行通信录,领悟了Python的基本语法结构,于是开头向更加高品位冲击,利用Eric与Qt
Designer
编写叁个带分界面包车型客车小程序。本次实操中也着实遇见了多数主题素材,通过学习也都消除了,达到了上学升高的目标。
【作弄】写博客比编制程序序难多了,程序写了一深夜,博客写了一整天,这么困难的写出来,希望得以援救到1些刚开始学习Python的敌人。由于本身不是正经出身,编制程序纯属业余爱好,所以也是一方面学1边编的,有不足的地点还请批评指正。

1.Project -> New

Ubuntu 1四.0四下搭建Python3.四 + PyQt伍.三.2 + 埃里克陆.0开荒平台

能够说那是1对GUI开荒完美的组成!

1.目标

编纂七个倒计时石英钟程序,用饼图的花样呈现一天、一周、7个月以及一年已经过了略微日子还剩多少时间,用于提示人青眼时间。

4858.com 1

引言

找了过多Python
GUI工具集,依然认为PyQt相比杰出,功用壮大跨平台,还辅助分界面设计器。花1天岁月折腾了Ubuntu
14.04(叁拾3位)+ Python3.四 + Qt5.叁.贰 + PyQt伍.三.2 + 埃里克六.0
的完整开拓平台的搭建,各个离谱差了一点扬弃了,还好终于11消除了,记录下来今后搭建起来方便点。
 

为了方便使用在正式开头在此之前大家先简单布署一下埃里克6的门类工作区

2.兑现情势

  • 是因为准库time模块无法三番五次,创制五个新的小时的类,使用规范库time模块来开始展览时间的连带操作。
  • 使用Eric与Qt Designer开发
  • 使用matplotlib的pie函数绘制饼图

2.填写项目名称,项目语言选择Python二,项目体系选拔PyQt4GUI,并精选项目文件夹位置,单击OK

安装Python3.4

Ubuntu1四.0四相似暗中同意安装了Python二.柒和Python3.4。故Python3.四的设置可略去。

配置Eric6

三.新手难题

  1. 对time模块面生,不知什么采纳。
  2. Qt Designer的使用。
  3. Qt中增加matplotlib组件窗口。

4858.com 2

安装Qt5

Ubuntu1四.0四自带Qt4的片段库文件,不过大家的平台必要Qt5,所以首先安装Qt五.

打开Eric6

3.1 time模块

time 模块提供了有个别甩卖日期和1天内时间的函数。它是白手起家在 C
运营时库的大概封装。
加以的日子和岁月足以被代表为浮点型(从参考时间, 日常是 一九陆陆.一.一到未来由此的秒数,即 Unix 格式),或许3个表示时间的 struct (类元组)。

三.弹出2个窗口,是让增加已有文件的,平日选No

Qt5.3.2下载:

4858.com 3

方法

4858.com 4

安装进程:

下载到的是Qt伍的在线安装程序,为其给予可举办权限就能够单击运营。由于小编前边文件都安装在/opt目录下,故那里以root身份安装:

  1. sudo chmod a+x qt-opensource-linux-x86-1.6.0-5-online.run   
  2. sudo ./qt-opensource-linux-x86-1.6.0-5-online.run 

sudo chmod a+x qt-opensource-linux-x86-1.6.0-5-online.run 
sudo ./qt-opensource-linux-x86-1.6.0-5-online.run

 运维分界面后私下认可安装就能够。

4858.com 5

选取菜单栏 设置-首选项

3.1.1 time()

重返从1967.1.1 到今后通过的秒数

>>> import time
>>> time.time()
1471794516.136771

肆.单击QtLogo,在红尘的空域区域内,右击鼠标,选取“New Form”新建窗体。

配置进度:

安装实现后安插一下PATH,在日前用户主目录下的.bashrc
(or .zshrc)文件中进入:

  1. export QTDIR=/opt/Qt/5.3/gcc/ 
  2.  
  3. export LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:${QTDIR}/lib 
  4.  
  5. export PATH=${QTDIR}/bin:${PATH} 

export QTDIR=/opt/Qt/5.3/gcc/

export LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:${QTDIR}/lib

export PATH=${QTDIR}/bin:${PATH}

只顾${QTDI奥迪Q三}/bin和${PATH}的依次!因为Ubuntu1四.0四私下认可${PATH}路线中的/usr/bin下存在大多qt命令(确切的就是指向qtchooser的软连接,qtchooser最后会选用系统自带的Qt4下令:可是那一个命令暗中认可都不存在),如若${QTDILAND}/bin在${PATH}之后,会促成Qt命令失效。

专程是qmake命令,在持续安装中须求选取,保证起见,在巅峰输入qmake,就算展现qmake命令不存在,请通过创造软连接实行缓解:

将/usr/bin下的qmake软连接受/opt/Qt/5.3/gcc/bin/qmake上,大概将/usr/lib/i38陆-linux-gnu/qt4/bin/qmake软连接受/opt/Qt/5.3/gcc/bin/qmake上:

  1. sudo ln -s /opt/Qt/5.3/gcc/bin/qmake /usr/bin/qmake 
  2. or 
  3. sudo ln -s /opt/Qt/5.3/gcc/bin/qmake /usr/lib/i386-linux-gnu/qt4/bin/qmake 

sudo ln -s /opt/Qt/5.3/gcc/bin/qmake /usr/bin/qmake
or
sudo ln -s /opt/Qt/5.3/gcc/bin/qmake /usr/lib/i386-linux-gnu/qt4/bin/qmake

那会儿再输入qmake查看是还是不是设置成功。

4858.com 6

3.1.2 localtime()

回来元组情势的年月,

>>> import time
>>> time.localtime()
time.struct_time(tm_year=2016, tm_mon=8, tm_mday=21, tm_hour=23, tm_min=49, tm_sec=57, tm_wday=6, tm_yday=234, tm_isdst=0)
名称 含义
tm_year
tm_mon
tm_mday
tm_hour
tm_min
tm_sec
tm_wday 周几(0-6)
tm_yday 一年中的第几天
tm_isdst -1代表系统判断是否为夏时令
0代表非夏时令
1代表夏时令

4858.com 7

安装SIP

SIP是python调用C/C++库的必需模块。由此SIP是PyQt的借助工具,安装PyQt从前必须先安装相应版本的SIP。PyQt编译时选拔的SIP版本必须与python私下认可调用的SIP保持1致!不然python中是力不从心调用PyQt的。那里大家使用新型的SIP
四.1陆.3.

Ubuntu14.0四中壹般是自带四.15版的SIP(or
自个儿安装python扩张是半自动安装的)。终端输入:

  1. sip -V 

sip -V

Designer编写倒计时石英钟,0开支平台。查看已设置SIP版本,借使存在其余版本,请查看python3的dist-packages目录下是还是不是留存sip相关文书。要是存在将其删除:

  1. sudo -rm /usr/lib/python3/dist-packages/sip* 

sudo -rm /usr/lib/python3/dist-packages/sip*

然后正式安装SIP
四.1陆.三。

在左侧列表中选取花色-多种项目,点击右边Logo后选定硬盘中的一个职位,作者那边是F:\Python\PyQt伍文本夹。选好后点击右下方的OK按钮。

3.1.3 ctime()

回到字符串格局的年华

>>> import time
>>> time.ctime()
'Sun Aug 21 23:50:56 2016'

伍.在弹出的窗口类型中,单击OK

SIP 4.16.3下载:

4858.com 8

3.1.4 strptime()

将字符串方式的时间转移成元组情势的时间

符号 含义
%y 两位数年份(00-99 )
%Y 四位数年份(000-9999 )
%m 月份(01-12)
%d 日期 0-31
%H 24小时制小时数( 0-23 )
%I 12小时制小时数( 01-12 )
%M 分钟数(00-59)
%S 秒(00-59)
%a 本地星期简化名称
%A 本地星期完整名称
%b 本地月份简化名称
%B 本地月份完整名称
%c 本地相应的日期表示和时间表示
%j 年内的第几天(001-366)
%p 本地A.M.或 P.M.
%U 一年中的星期数(00-53),星期天为星期的开始
%w 星期(0-6),星期天为星期的开始
%W 一年中的星期数(00-53),星期一为星期的开始
%x 本地相应的日期表示
%X 本地相应的时间表示
%Z 当前时区名称
%% %号
>>> import time
>>> time.strptime('20160821','%Y%m%d')
time.struct_time(tm_year=2016, tm_mon=8, tm_mday=21, tm_hour=0, tm_min=0, tm_sec=0, tm_wday=6, tm_yday=234, tm_isdst=-1)

4858.com 9

设置进度:

  1. tar -zxvf sip-4.16.3.tar.gz   
  2. cd sip-4.16.3 
  3. python3 configure.py 
  4. sudo make 
  5. sudo make install 

tar -zxvf sip-4.16.3.tar.gz 
cd sip-4.16.3
python3 configure.py
sudo make
sudo make install

布置进程:

SIP无需配置,只是须要设置到位后专注查对一下版本:

独家在终点输入:

  1. sip -V 

sip -V

在python三环境输入:

  1. >>>import sip 
  2. >>>print(sip.SIP_VERSION_STR) 

>>>import sip
>>>print(sip.SIP_VERSION_STR)

翻看2者呈现的本子是不是一致。如不壹致,必要再一次施行上述删除进度和装置进程。版本不一样等将代表前边编写翻译PyQt所运用的SIP和Python三调用的SIP的不均等,导致在Python三中调用PyQt的相关模块(from
PyQt5 import QtCore)出现类似如下错误:

  1. the sip module implements API v11.0 but the PyQt5.QtCore module requires API v11.1 

the sip module implements API v11.0 but the PyQt5.QtCore module requires API v11.1

4858.com 10

简轻易单布署后,让大家专业开班感受极速GUI开荒

3.1.5 strftime()

将元组方式的字符串根据钦赐格式转变来字符串情势

>>> import time
>>> time.strftime('%Y%m%d',(2016,8,21,0,0,0,6,234,0))
'20160821'

陆.在弹出的对话框中,输入UI文件的名称,并保留。

安装PyQt5

PyQt是Python的贰个跨平台图形开拓工具集,是Python与Qt的中标融入。PyQt包涵了大约4三十柒个类、超过5000个的函数和方式,灰常庞大。必要留意的是,埃里克(1种Python
IDE,注重PyQt)当前新型的平静版埃里克四头扶助PyQt四(确切的身为PyQt肆.八上述5.0以下),帮助PyQt伍的Eric版本未来仅为埃里克六.0 snapshot版,该版本包蕴最新的埃里克5的装有机能,但安居要求测试。若是你希望利用稳固的埃里克五,请在此步骤安装PyQt四的摩登版PyQt四.1一.2。那里大家设置PyQt五.三.二.

实例

3.1.6 mktime()

讲元组格局的年华转变来从19690十壹合计的秒数

>>> import time
>>> time.mktime((2016,8,21,0,0,0,6,234,0))
1471708800.0

4858.com 11

PyQt5.3.2下载:

确立项目

3.2 Eirc与Qt Designer的使用

本有的组成项目编制一同讲明。

7.在弹出的编辑器中,拖动控件,编辑后保存并关闭窗口。

设置过程:

  1. tar -zxvf PyQt-gpl-5.3.2.tar.gz 
  2. cd PyQt-gpl-5.3.2 
  3. python3 configure.py     

tar -zxvf PyQt-gpl-5.3.2.tar.gz
cd PyQt-gpl-5.3.2
python3 configure.py   

只顾:此命令生成各个Qt模块后,在这之中的QtWebKitWidgets模块由于Qt4和Qt5的qprinter.h所属模块的调节(Qt四设有于QtGui中,Qt5将其调控到QtPrintSupport中了),QtWebKitWidgets的Makefile中缺点和失误了对QtPrintSupport的头文件目录引用,会导致后边编写翻译PyQt伍时心中无数找到qprinter.h头文件,编写翻译战败(编写翻译进程卓越悠久):

  1. qprinter.h: No such file or directory 

qprinter.h: No such file or directory

所以须求向刚生成的QtWebKitWidgets模块源文件的MakeFile文件的INCPATH中增多QtPrintSupport引用。

原INCPATH为:

  1. INCPATH     
     = -I/opt/Qt/5.3/gcc/mkspecs/linux-g++ -I. -I. -I/usr/include/python3.4m -I/opt/Qt/5.3/gcc/include -I/opt/Qt/5.3/gcc/include/QtWebKitWidgets -I/opt/Qt/5.3/gcc/include/QtWebKit -I/opt/Qt/5.3/gcc/include/QtWidgets -I/opt/Qt/5.3/gcc/include/QtNetwork -I/opt/Qt/5.3/gcc/include/QtGui -I/opt/Qt/5.3/gcc/include/QtCore -I. 

INCPATH       = -I/opt/Qt/5.3/gcc/mkspecs/linux-g++ -I. -I. -I/usr/include/python3.4m -I/opt/Qt/5.3/gcc/include -I/opt/Qt/5.3/gcc/include/QtWebKitWidgets -I/opt/Qt/5.3/gcc/include/QtWebKit -I/opt/Qt/5.3/gcc/include/QtWidgets -I/opt/Qt/5.3/gcc/include/QtNetwork -I/opt/Qt/5.3/gcc/include/QtGui -I/opt/Qt/5.3/gcc/include/QtCore -I.

 修改为:

  1. INCPATH     
     = -I/opt/Qt/5.3/gcc/mkspecs/linux-g++ -I. -I. -I/usr/include/python3.4m -I/opt/Qt/5.3/gcc/include -I/opt/Qt/5.3/gcc/include/QtWebKitWidgets -I/opt/Qt/5.3/gcc/include/QtWebKit -I/opt/Qt/5.3/gcc/include/QtWidgets -I/opt/Qt/5.3/gcc/include/QtNetwork -I/opt/Qt/5.3/gcc/include/QtPrintSupport -I/opt/Qt/5.3/gcc/include/QtGui -I/opt/Qt/5.3/gcc/include/QtCore -I. 

INCPATH       = -I/opt/Qt/5.3/gcc/mkspecs/linux-g++ -I. -I. -I/usr/include/python3.4m -I/opt/Qt/5.3/gcc/include -I/opt/Qt/5.3/gcc/include/QtWebKitWidgets -I/opt/Qt/5.3/gcc/include/QtWebKit -I/opt/Qt/5.3/gcc/include/QtWidgets -I/opt/Qt/5.3/gcc/include/QtNetwork -I/opt/Qt/5.3/gcc/include/QtPrintSupport -I/opt/Qt/5.3/gcc/include/QtGui -I/opt/Qt/5.3/gcc/include/QtCore -I.

 也许能够间接在QtWeb基特Widgets模块源文件的QtWebKitWidgets.pro文件中参预:

  1. QT += printsupport 

QT += printsupport

也行。

接下去试行编写翻译安装:

  1. sudo make   
  2. sudo make install 

sudo make 
sudo make install

配备进度:

安装实现后进入Python三条件认证是不是安装成功:

  1. >>>import PyQt5 

>>>import PyQt5

假若提示不设有PyQt5模块,表示安装的PyQt伍尚未被python三没有错识别。暗中认可的安装路径为python的site-packages目录。平常python三的模块安装路线会分成1个,3个/usr/lib/python三,三个/usr/lib/python三.4,多个路子下的模块都能被python三环境科学调用,不过python三.四的site-packages目录下的模块貌似不恐怕调用。PyQt伍偏偏暗许安装到此目录了。消除办法是为其创立软连接,保证起见,python3索引和python叁.四目录分别创立三个:

  1. sudo ln -s /usr/lib/python3.4/site-packages/PyQt5 /usr/lib/python3.4/PyQt5 
  2. sudo ln -s /usr/lib/python3.4/site-packages/PyQt5 /usr/lib/python3/dist-packages/PyQt5 

sudo ln -s /usr/lib/python3.4/site-packages/PyQt5 /usr/lib/python3.4/PyQt5
sudo ln -s /usr/lib/python3.4/site-packages/PyQt5 /usr/lib/python3/dist-packages/PyQt5

只怕分化的微型Computer上可识其余模块安装目录会设有差别,不过解决原理都大概,在python三可识别模块的门路下创办PyQt伍的软连接就可以让Python三打响识别。

除此以外2个消除办法是在python三configure.py  时就指虞诩装目录。如:

  1. python3 configure.py –destdir /usr/lib/python3.4 

python3 configure.py --destdir /usr/lib/python3.4

 

4858.com ,张开Eric六,菜单栏中采取项目新建

3.三Qt中增加matplotlib组件窗口

在Qt中增添matplotlib组件窗口须求创设三个新的类mplwidget,在这几个类中开创matplotlib的画布,然后在Qt
designer中增多1个常常的Widget,然后将以此widget进步为大家所建的类mplwidget。

4858.com 12

安装QScintilla2

QScintilla贰是连接编写翻译器和Python的接口,因而是埃里克的画龙点睛前置组件。QScintilla2中必要独自安装一个模块:本体,Designer和python bingdings。

4858.com 13

肆.类型编制

八.右击XXX.ui, 单击“Generate Dialog Code…”,生成窗体代码。

QScintilla2.8.4下载:

在类型性质对话框中的项目名称中输入Hello,你会发觉右下方的OK按键不可用。究其原因是体系文件夹中体现的是大家刚安装的泛滥成灾项目工作区目录,也等于说在该目录下能够存在四个档次。四个档次混在一同料定是10分的了,还要将它们用文件夹区分开来,简单的说便是该目录下的各类文件夹便是三个类型(当然了,本身胡乱创制的公文夹肯定不是了)。找到原因后大家就足以缓解难点了。

四.一 创设项目

  1. 开采埃里克,单击菜单栏【项目】-【新建】
    4858.com 14
  2. 输入“项目名称”,选拔“项目文件夹”,点击【OK】
    4858.com 15

    肆.2开立窗体

  3. 在埃里克“项目浏览器”的“窗体”中,单击右键,选用【新建窗体】
    4858.com 16

  4. 选用窗体类型“主窗口”,点击【OK】
    4858.com 17
  5. 输入窗体文件名,点击【Save】
    4858.com 18
  6. 在档次浏览器中,右键点击新建的.ui窗体文件,选择【在Qt设计师中开发】
    4858.com 19
  7. 展开Qt
    Designer后,会有多少个为主的窗口,你协调的窗口“MainWindow”、“窗口部件盒”、“对象查看器”、“属性编辑器”,其余的窗口可从菜单栏“视图”窗口选用。
    拖拽“MainWindows”设置窗口的起来大小
    从“窗口部件盒”拖多少个Widget到“MainWindow”
    4858.com 20
  8. 在“MainWindow”五个Widget以外的地点单击右键,选拔【布局】-【水平布局】
    4858.com 21
  9. 在二个Widget上单击右键,选拔【提高为】
    4858.com 22
  10. 在“进步的类名称”中输入要开创的自定义的widget类名称,点击【增加】
    4858.com 23
  11. 当选“提高的类”中新建的这个类,点击【进步】
    4858.com 24
  12. 入选Widget组件,在右手的“属性编辑器”少校objectName改为mpl···Widget
    4858.com 25
  13. 封存文件,退出Qt Designer。
  14. 右击埃里克“项目浏览器”中的.ui窗体文件,选拔【编写翻译窗体】,生成文书Ui_countdownmainwindow.py
    4858.com 26
  15. 开辟生成的文件,将from mplpiewidget import MplPieWidget
    剪切至class Ui_MainWindow(object):地方,保存文件。

    四.4 自定义Widget类的编辑

  • 单击埃里克工具栏新建开关,创设2个空荡荡文书档案,保存为名叫‘mplpiewidget.py’的公文。
    4858.com 27
  • 伪代码

    # 导入PyQt5的图形分界面组件模块QtGui,非图形类模块QtCore,基础分界面控件模块QtWidgets,
    # 导入matplotlib库中qt五后端,用于落实在qt伍的零部件里绘制matplotlib图像。
    # 导入matplotlib的figure模块,figure模块包括全部画图的要素。
    # 创制matplotlib的画布类MplCanvas,承继于qt伍agg的figurecanvas

    #初始化
        #创建figure,Axis
        #超类初始化
        #将widget设置成expandable,随窗口变化
        #系统更新widget设置
    

    #创制自定义widget类MplPieWidget,承继于QtWidget.QWidget

    #初始化
        #超类初始化
        #创建MplCanvas实例画布
        #创建垂直布局的容器
        #在容器中添加画布
        #设置垂直布局生效
    
  • 编纂代码

    # 导入PyQt5的图形分界面组件模块QtGui,非图形类模块QtCore,基础分界面控件模块QtWidgets,
    from PyQt5 import QtGui, QtCore, QtWidgets
    # 导入matplotlib库中qt伍后端,用于落到实处在qt五的机件里绘制matplotlib图像。
    from matplotlib.backends.backend_qt5agg import FigureCanvasQTAgg as FigureCanvas
    # 导入matplotlib的figure模块,figure模块包蕴全部画图的因素。
    from matplotlib.figure import Figure

    # 创设matplotlib的画布类MplCanvas,承继于qt伍agg的figurecanvas
    class MplCanvas(FigureCanvas):

    #初始化
    def __init__(self):
        #创建figure,Axis
        self.fig= Figure()
        self.ax= self.fig.add_subplot(111)
        #超类初始化
        FigureCanvas.__init__(self,self.fig)
        #将widget设置成expandable,随窗口变化
        FigureCanvas.setSizePolicy(self,\
            QtWidgets.QSizePolicy.Expanding,\
            QtWidgets.QSizePolicy.Expanding)
        #系统更新widget设置
        FigureCanvas.updateGeometry(self)
    

    #成立自定义widget类MplPieWidget,承继于QtWidget.QWidget
    class MplPieWidget(QtWidgets.QWidget):

    #初始化
    def __init__(self, parent= None):
        #超类初始化
        QtWidgets.QWidget.__init__(self,parent)
        #创建MplCanvas实例画布
        self.canvas= MplCanvas()
        #创建垂直布局的容器
        self.vbl= QtWidgets.QVBoxLayout()
        #在容器中添加画布
        self.vbl.addWidget(self.canvas)
        #设置垂直布局生效
        self.setLayout(self.vbl)
    

4858.com 28

安装进度:

  1. tar -xzvf QScintilla-gpl-2.8.4.tar.gz 
  2. cd QScintilla-gpl-2.8.4 

tar -xzvf QScintilla-gpl-2.8.4.tar.gz
cd QScintilla-gpl-2.8.4

 

A.安装本体:

  1. cd Qt4Qt5 
  2. qmake qscintilla.pro 
  3. sudo make 
  4. make install 

cd Qt4Qt5
qmake qscintilla.pro
sudo make
make install

B.安装Designer:

  1. cd ../designer-Qt4Qt5 
  2. qmake designer.pro   
  3. sudo make 
  4. sudo make install 

cd ../designer-Qt4Qt5
qmake designer.pro 
sudo make
sudo make install

 

C.安装Python bingdings:

  1. cd ../Python 
  2. python3 configure.py –pyqt=PyQt5 
  3. sudo make 
  4. sudo make install 

cd ../Python
python3 configure.py --pyqt=PyQt5
sudo make
sudo make install

上述步骤就能够正确安装QScintilla二。须求留意的是Python
bingdings安装时需求内定 –pyqt=PyQt5参数,不然暗许是为PyQt四装置。大概直接改换其configure.py,将pyqt5_is_default
= False改为pyqt5_is_default = True也可。

点击项目文件夹后边的图标

4.4 Time类编写

  • 单击埃里克工具栏新建按键,创设二个空荡荡文书档案,保存为名称为‘mytime.py’的文书。
  • 伪代码

    #导入time模块
    #创建Time类

    #获取现在的年、月、日、时、分、秒、星期以及今天是今年的第几天
    #将值赋给year,month,day,hour,minute,second,weekday,yearday
    
    #创建一个方法,根据是不是闰年返回今年的总天数
        #if year能够被400整除:
            #天数为366
        #elif year能被100整除:
            #天数为365
        #elif year能被4整除:
            #天数为366
        #else:
            #天数为365
        #返回天数
    #创建本年天数变量daysOfYear
    
    #创建一个方法,返回本月天数
        #if month是1,3,5,7,8,10,12月:
            #天数为31
        #elif month是4,6,9,11月:
            #天数是30
        #elif 今年是闰年:
            #天数为29
        #else:
            #天数为28
        #返回天数
    
    #创建本月天数变量daysOfMonth
    
    #创建一个方法,将字符串形式时间转换成时间戳
        #将year,month,day转换成字符串连在一起
        #将时间戳形式时间返回
    
    #将今天的时间(时分秒)换算成秒数
    
  • 编辑代码

    #导入time模块
    import time

    #创建Time类
    class Time(object):

    #获取现在的年、月、日、时、分、秒、星期以及今天是今年的第几天
    #将值赋给year,month,day,hour,minute,second,weekday,yearday
    localTime= time.localtime()
    year,month,day,hour,minute,second,weekday,yearday= localTime[0:-1]
    
    #创建一个方法,根据是不是闰年返回今年的总天数
    def totalDaysOfYear(year):
        #if year能够被400整除:
        if year% 400== 0:
            #天数为366
            totalDays= 366
        #elif year能被100整除:
        elif year% 100== 0:
            #天数为365
            totalDays= 365
        #elif year能被4整除:
        elif year% 4== 0:
            #天数为366
            totalDays= 366
        #else:
        else:
            #天数为365
            totalDays= 365
        #返回天数
        return totalDays
    
    #创建本年天数变量daysOfYear
    daysOfYear= totalDaysOfYear(year)
    
    #创建一个方法,返回本月天数
    def totalDaysOfMonth(month):
        #if month是1,3,5,7,8,10,12月:
        if month in [1,3,5,7,8,10,12]:
            #天数为31
            totalDays= 31
        #elif month是4,6,9,11月:
        elif month in [4,6,9,11]:
            #天数是30
            totalDays= 30
        #elif 今年是闰年:
        elif self.daysOfYear== 366:
            #天数为29
            totalDays= 29
        #else:
        else:
            #天数为28
            totalDays= 28
        #返回天数
        return totalDays
    
    #创建本月天数变量daysOfMonth
    daysOfMonth= totalDaysOfMonth(month)
    
    #创建一个方法,将字符串形式时间转换成时间戳
    def transformTime(year,month,day):
        #将year,month,day转换成字符串连在一起
        nowtime= str(year)+ '-'+ str(month)+ '-'+ str(day)
        #将时间戳形式时间返回
        return time.mktime(time.strptime(nowtime,'%Y-%m-%d'))
    
    #将今天的时间(时分秒)换算成秒数
    secondsOfTheDay= time.time()- transformTime(year,month,day)
    

九.在弹出的窗口中,单击New,再单击OK

布局进程:

无需额外铺排。

4858.com 29

四.伍 主程序编写制定

1.埃里克“项目浏览器”右击.ui文件选用【生成对话框代码】
4858.com 30
2.选择【新建】类名
4858.com 31
三.单击【OK】,项目中生成名称为countdownmainwindow.py的公文
4858.com 32
4.编辑countdownmainwindow.py

  • from .Ui_countdownmainwindow import Ui_MainWindow改为from Ui_countdownmainwindow import Ui_MainWindow
  • 导入我们写的Time类

from mytime import Time

  • 创建叁个制图饼图的章程

    def plotPie(self,widget,list,colors):
        widget.canvas.ax.clear()
        widget.canvas.ax.pie(list,explode= None, labels= None, colors= colors, \
        labeldistance= 1.1, autopct= None,shadow= False, \
        startangle= 90, pctdistance= 0.6)
        widget.canvas.draw()
    
  • 创建列表,用于绘制饼图及安装饼图颜色

    #创建年列表=[今年剩余天数,已过天数]
    yearList= [Time.daysOfYear- Time.yearday, Time.yearday]
    yearColorsList= ['blue','gray']
    #创建月列表=[本月剩余天数,已过天数]
    monthList= [Time.daysOfMonth- Time.day, Time.day]
    monthColorsList= ['blue','gray']
    #创建周列表=[本周剩余天数,已过天数]
    weekList= [6-Time.weekday, Time.weekday+1]
    weekColorsList= ['blue','gray']
    #创建日列表-[本天剩余秒数,已过秒数]
    dayList= [24*60*60- Time.secondsOfTheDay, Time.secondsOfTheDay]
    dayColorsList= ['blue','gray']
  • 在__init__艺术中增加绘制饼图的方法

    def __init__(self, parent=None):
        """
        Constructor
    
        @param parent reference to the parent widget
        @type QWidget
        """
        super(MainWindow, self).__init__(parent)
        self.setupUi(self)
        self.plotPie(self.mplYearWidget,ListOfPie.yearList,['blue','gray'])
        self.plotPie(self.mplMonthWidget,ListOfPie.monthList,['blue','gray'])
        self.plotPie(self.mplWeekWidget,ListOfPie.weekList,['blue','gray'])
        self.plotPie(self.mplDayWidget,ListOfPie.dayList,['blue','gray'])
    
  • 在终极加多如下代码,将主窗口体现出来。

    if name == ‘main‘:

    import sys
    from PyQt5.QtWidgets import QApplication
    
    app = QApplication(sys.argv)
    mw = MainWindow()
    mw.show()
    sys.exit(app.exec_())
    
  • 完全代码为:

    # –– coding: utf-8 –

    “””
    Module implementing MainWindow.
    “””

    from PyQt5.QtCore import pyqtSlot
    from PyQt5.QtWidgets import QMainWindow
    from countdown import ListOfPie
    from Ui_CountdownMainWindow import Ui_MainWindow

class MainWindow(QMainWindow, Ui_MainWindow):
    """
    Class documentation goes here.
    """
    def __init__(self, parent=None):
        """
        Constructor

        @param parent reference to the parent widget
        @type QWidget
        """
        super(MainWindow, self).__init__(parent)
        self.setupUi(self)
        self.plotPie(self.mplYearWidget,ListOfPie.yearList,['blue','gray'])
        self.plotPie(self.mplMonthWidget,ListOfPie.monthList,['blue','gray'])
        self.plotPie(self.mplWeekWidget,ListOfPie.weekList,['blue','gray'])
        self.plotPie(self.mplDayWidget,ListOfPie.dayList,['blue','gray'])


    def plotPie(self,widget,list,colors):
        widget.canvas.ax.clear()
        widget.canvas.ax.pie(list,explode= None, labels= None, colors= colors, \
        labeldistance= 1.1, autopct= None,shadow= False, \
        startangle= 90, pctdistance= 0.6)
        widget.canvas.draw()

if __name__ == '__main__':
    import sys
    from PyQt5.QtWidgets import QApplication

    app = QApplication(sys.argv)
    mw = MainWindow()
    mw.show()
    sys.exit(app.exec_())

4858.com 33

安装Eric6

埃里克作为一款庞大的开源Python
IDE,帮忙Qt界面设计器的埃里克在Python
GUI开采中国和越南社会主义共和国来越优良,Python+PyQt+埃里克已经成为1种标准的Python
GUI开拓平台。个中埃里克肆补助Python2.陆+与PyQt四.6+组合,埃里克五扶助Python三.0+与PyQt4.8+组合,埃里克6支撑Python叁.0+与PyQt伍.0+组合。近年来埃里克五.4.柒为新型牢固版。埃里克6.0为snapshot版。上文已有介绍。具体搭配可参看:.

 

4.陆 程序的调节与运作

  • F伍键为调节和测试程序
    选中主程序调节和测试,调试整个项目,如若未有不当直接运营
    4858.com 34
  • F贰键为直接运维程序
    4858.com 35

10.假若控件中有开关,还要勾选对应的on_pushButton_click(), 点击OK退出。

Eric6.0下载:

下载在那之中的eric陆-六.0-snapshot-20160720.tar.gz主文件和eric陆-i1八n-zh_CN.GB2312-陆.0-snapshot-二〇一六0720.tar.gz中文语言包。

 在开荒的选用项目文件夹对话框中右键点击空白处,在弹出的菜单中选择新建-文件夹

五 程序演示

4858.com 36


4858.com 37

安装进程:

  1. tar -zxvf eric6-6.0-snapshot-20140720.tar.gz 
  2. tar -zxvf eric6-i18n-zh_CN.GB231贰-陆.0-snapshot-二零一四0720.tar.gz   
     //语言包文件会自动解压到埃里克6.0主文件解压目录中。未有的话手动复制。 
  3. cd eric6-6.0-snapshot-20140720 
  4. sudo python叁 install.py           //安装主程序 
  5. sudo python叁 install-i1捌n.py   //安装汉语语言包 

tar -zxvf eric6-6.0-snapshot-20140720.tar.gz
tar -zxvf eric6-i18n-zh_CN.GB2312-6.0-snapshot-20140720.tar.gz     //语言包文件会自动解压到Eric6.0主文件解压目录中。没有的话手动复制。
cd eric6-6.0-snapshot-20140720
sudo python3 install.py           //安装主程序
sudo python3 install-i18n.py   //安装中文语言包

相应能够如愿安装到位。

亟需留意,由于是以root身份安装(sudo),所以运维时索要实行:

  1. sudo eric6 

sudo eric6

才不会促成埃里克运维依然关闭时写入配置文件出错(sudo安装的埃里克6的文件都以root全数,别的用户施行埃里克六写入配置文件时权限不足)。为了保障直接试行:

  1. eric6 

eric6

时不致出错,能够将最近用户的eric陆目录权限设置为可读写:

  1. sudo chmod a+w -R ~/.eric6 

sudo chmod a+w -R ~/.eric6
  1. sudo chmod a+w -R ~/.config/Eric6 

sudo chmod a+w -R ~/.config/Eric6

恐怕安装时就平素

  1. python3 install.py   
  2. python3 install-i18n.py 

python3 install.py  
python3 install-i18n.py

就无需sudo试行了。不过不引入那样做。

4858.com 38

4858.com 39

本文版权归作者和新浪共有,欢迎转发,但未经我同意必须保留此段注解,且在篇章页面显明位置给出原来的书文连接,不然保留追究法律权利的义务。

想看看Matplotlib教学摄像,了然愈多Matplotlib实用技艺可关切

微信公众账号: MatplotlibClass
4858.com 40

明天头条号:Matplotlib小学教育室
4858.com 41

11.右击XXX.ui, 单击“Compile Form”,编写翻译窗体文件。

配置进程:

终端输入eric六开始:

一、选用Settings -> preference -> 艾德itor
-> Autocompation。勾选全体选框;

4858.com 42

贰、选择Settings -> preference -> 艾德itor
-> QScintilla 。勾上左右的七个选框,然后在上边source中,选拔from
Document and API files;

4858.com 43

叁、选择Settings
-> preference -> 艾德itor -> APIs。勾选Complie APIs
Autocompation,在Language中,选取python叁。点面上边包车型客车Add from installed
APIs按钮,选择住要求的.api文件。最终点击Compile APIs;

4858.com 44

4、选择Settings -> preference -> Interface
->
Interface。左侧Language依据喜好选择中文恐怕English。重启生效。

4858.com 45

布局完结。

变动新建文件夹的称呼为Hello(1般与项目名称同),选中该公文夹后点击右下方的选拔文件夹按钮

4858.com 46

Demos

提供一个简易的德姆o验证平台是或不是科学搭建。

4858.com 47

12.在转换的代码xxx.py的第七行,from .Ui_xxx前边的句号必要手动删除。

A. 非Eric小程序:

  1. #!/usr/bin/env python  
  2. from PyQt5.QtWidgets import (QApplication, QLabel) 
  3. import sys 
  4.  
  5.  
  6. if __name__ == “__main__”: 
  7.     app = QApplication(sys.argv) 
  8.     label = QLabel(“<center>Hello World with PyQt5!</center>”) 
  9.     label.resize(200, 50) 
  10.     label.show() 
  11.     sys.exit(app.exec_()) 

#!/usr/bin/env python
from PyQt5.QtWidgets import (QApplication, QLabel)
import sys


if __name__ == "__main__":
    app = QApplication(sys.argv)
    label = QLabel("<center>Hello World with PyQt5!</center>")
    label.resize(200, 50)
    label.show()
    sys.exit(app.exec_())

 

4858.com 48

归来项目性质对话框后得以看看项目文件夹已变为F:\Python\PyQt5\Hello,同时右下角的OK按键已彰显可用。

4858.com 49

B. Eric小项目:

此部分转��:

一、新建项目。

点击【项目】-【新建】,弹出如下的对话框。创设1个名称叫demo贰的类型。注意,在创设项目时,eric不会活动依照填写的项目名称修改项目文件夹名称!

4858.com 50

点击明确现在,能够看到一个源代码树中只有__init__.py的门类。其它,eric还创制了多少个公文,可是并不会在此处展现出来,他们各自是类别文件”pyqtdemo.e四p”和”_eric4project”文件夹。

2、新建窗体。

将左手的【源代码】选项卡切换至【窗体】选项卡(左数16回之个)。右键空白区域,采取【新建窗体】。在弹出的对话框中精选【对话框】。在弹出的文本对话框中,选用文件地点,并填写文件名称。那里,大家将其命名叫demo二.ui。显著后,就能够看来【窗体】选项卡中,有一个demo2.ui文件了。

4858.com 514858.com 524858.com 53

叁、设计窗体。

右键点击“pyqtdemo.ui”文件,选拔【在Qt设计师中开发】,就可以在Qt
Designer中设计UI分界面了。

4858.com 54

从图中可以看到,Qt
Designer分为如下多少个部分:

  • 菜单栏:包括文件、编辑、窗体、视图、设置、窗口和帮扶。
  • 工具栏:包蕴文件操作、部件前前置、编辑窗口部件、编辑实信号/槽、编辑伙伴、编辑Tab顺序、布局格局、调控大小等。
  • 部件栏:包蕴种种可用部件。
  • 窗体设计区域
  • 对象查看器:能够查看各部件对象关系树及其所属的类
  • 脾气编辑器
  • 时域信号/槽编辑器
  • 动作编辑器
  • 财富编辑器

 

3.一、修改窗体属性

暗中同意的窗体属性中,objectName(部件名称,别的程序引用时选择)默认为Dialog,windowTitle(窗体标题)暗许也是Dialog。大家能够遵照本人的急需,对对话框的依次属性举行改换。那里,笔者只修改了windowTitle为“PyQt
Demo”,并转移了其尺寸。

叁.二、增添部件

从右边的widget
box中拖出2个PushButton,三个label。修改它们的objectName、text等品质。个中2个PushButton的ObjectName分别为btn一、btn二、btnClose。
增加后的效果图,如下图所示:

4858.com 55

四、功率信号与槽

4.1、概念

在PyQt5中,事件处理的有关术语为“时限信号(signal)”和“槽(slot)”。
复信号的含义正是我们常说的轩然大波,比如开关被按下、复选框勾选状态改动、可输入文本框文本改变等等。
槽的意思则是事件处理函数,比如关闭窗体、隐藏窗体、最大/小化、设置要点、重绘等。

四.二、使用三个自带的槽

咱俩从工具栏中,选取【编辑非确定性信号/槽】。

拖动要编写的预制构件,会产出3个好像于电路中接地符号的注脚,并弹出对话框。

此处,大家选取clicked(),即按键被按下,此时看看右侧可选的槽并不多,并且未有大家希望选拔到的闭馆功效。
4858.com 56

勾选【显示从QWidget承继的能量信号和槽】,那时能够窥见,右边的槽多了成都百货上千。在中间找到close(),点击鲜明。此时,点击【关闭】开关执行对话框关闭的遵守就曾经达成了。
4858.com 57

下图是壹度创设了【关闭】按键槽之后的窗体设计图。

4858.com 58

四.叁、第二回运行

虽说只兑现了一个停歇作用,然而依旧让大家先来看望哪些运转这几个到如今停止壹行代码都尚未写过的程序吗。
未来再次回到eric的分界面,右键“demo2.ui”,选择【编写翻译窗体】。

短暂的时间之后,可以看来编写翻译成功唤醒。那时,大家切换到【源代码】选项卡,能够见见1个名称为Ui_demo二.py的文件,那正是依照刚才至极ui文件自动编写翻译而成的,大家不供给对其开展任何修改,也不应该对其打开其余改变,因为,任何对那种文件,在下次编写翻译后,在此以前的修改会全体不设有。

看,下图,便是大家先是次运行时的气象。在eric里,我们能够F二直接运营,或F5开始展览调控。当按下【关闭】的时候,窗体就会被关闭。

4858.com 59

肆.四、创立自定义槽

利用自带槽的艺术相当粗略,然则,它所能实现的效益也是简单的,在大家的支出中,绝大大多实信号发生时,不会采取私下认可的槽。由此,这一小节将通过按键一、二的完毕来介绍如何创制几个自定义槽。
自定义槽,将需求本人写其中的槽函数,而此前的操作中,大家还未曾动手写过1遍代码,那么这几个槽的代码写在何地啊?
咱俩再切换回【窗体】选项卡,右键demo二.ui,采用【生成对话框代码】。
先是,点击【新建】,新建二个类,在此间能够修改类名、文件名和路线。

然后在底下的选框中,选用本身须要利用到的实信号。比如,小编的采取如下图所示,是三个开关被按下时的确定性信号:

4858.com 604858.com 61

那时候,就生成了四个默许的代码。对这么些代码举办修改,完成预期的内容。

4858.com 62

5、完成

修改之后代码和平运动转界面如下:

4858.com 63

 

4858.com 64

13.从Ui_xxx.py代码里把后边的init_main部分的代码拷到xxx.py里,并删除无关的几行,使得留下:

( 完 )

 

Ubuntu 12.04 安装PYQT4和Eric4

 

Ubuntu下安装配置Python 三.二.三集成支付环境埃里克5 

连带文书档案:PyQt四入门指南 下载见

推荐学习:PyQt肆 精粹实例分析

CentOS上源码安装Python叁.四 

《Python宗旨编制程序 第壹版》.(韦斯利 J. Chun ).[高清PDF中文版]

《Python开拓技巧详解》.( 张家振,宗杰).[高清PDF扫描版+随书录像+代码]

PyQt 的事无巨细介绍:请点那里
PyQt 的下载地址:请点那里

 

1肆.04下搭建Python三.4 + PyQt5.3.2 +
埃里克6.0支付平台 引言 找了众多Python
GUI工具集,依然感到PyQt比较不错,成效庞大跨平台,还帮忙分界面设计…

点击OK按键后边世八个提醒框,是不是将已有文件增加到项目中?尽管该类型文件夹下还不曾别的公文,可是此地采用Yes,因为自身一度选取No后到运营脚本时意识不可能执行该意义。 

4858.com 65

if__name__ ==”__main__”:

importsys

app = QtGui.QApplication(sys.argv)

dialog = Dialog()

dialog.show()

sys.exit(app.exec_())

点击Yes后在弹出的文件类型关联对话框直接OK

4858.com 66

4858.com 67

4858.com 68

着眼程序主分界面包车型客车标题栏发现突显Hello –
eric6
。在品种浏览器的顶部源代码标签里活动为大家转移一个_init_.py文件,该文件中绝非其他代码,我们不用去理会。

14.假诺说QtGui未定义的话,在文书开头加上:

4858.com 69

from PyQt4 import QtGui

创立窗体

1五.封存并运维:

点击源代码标签右边的窗体标签,在标签下边包车型地铁空白点右键点击,弹出的菜单采纳新建窗体 

4858.com 70

4858.com 71

弹出新建窗体对话框,能够选取其余窗体类型,那里大家选拔默许对话框类型,点击OK按钮

4858.com 72

在弹出的新建窗体保存对话框中得以看来程序已将路线定位到品种文件夹下,输入文件名后点击保存按钮

4858.com 73

在埃里克六的窗体标签下能够看出程序已自行成立了HelloWindow.ui文件 

4858.com 74

规划窗体

点击上一步的保存开关后,Computer会直接展开Qt设计师,并活动将HelloWindow.ui加载到程序中 

4858.com 75

在左手的Widget Box里找到Push
Button
控件,用鼠标左键按住该控件不放,拖拽到HelloWindow.ui的统一筹划窗体。拖拽三个Push
Button
控件到窗体

4858.com 76

再找到Label控件,拖拽1个该控件到窗体

4858.com 77

在先后的左侧观看目的查看器个性编辑器。使用对象查看器能够急速选用窗体中的控件,质量编辑器能够编写修改窗体、控件的各个品质。

利用对象查看器选用大家刚拖拽的四个控件,分别将它们的objectName质量改变成:

  • 左边PushButton:Button_ok
  • 右边PushButton:Button_close
  • Label:label

4858.com 78

 

分级将它们的text天性更换成:

  • 左边PushButton:确定
  • 右边PushButton:关闭
  • Label:显示

4858.com 79

编写制定确定性信号/槽

接下去给关闭开关增添退出程序的指令。在Qt设计师中,能够很直观的为控件增多事件命令,在PyQt5中那种形式丰盛的轩然大波命令被称呼信号/槽。(注:信号/槽体制是PyQt独有的功率信号传递机制,使用卓殊有益)

点击工具栏的编写实信号/槽图标

4858.com 80

鼠标移动到关闭控件上面,左键按下拖拽处革命地线标记后放手鼠标

4858.com 81

弹出布局链接窗口,在该窗口中勾选体现从QWidget承接的时域信号和槽

4858.com 82

在左手列表采取clicked(),在右侧列表接纳close()

其1操作的意义为:当点击关闭开关时,实施关闭命令 

4858.com 83

点击OK后方可知见刚选用的两项已链接附加到关闭按键上

4858.com 84

点击工具栏中的保存按键后关闭Qt设计师程序

4858.com 85

编写翻译测试

回去埃里克6中,右键点击HelloWindow.ui文件,在弹出的菜单中采取编写翻译窗体

4858.com 86

稍等片刻后程序会提醒编译成功

4858.com 87

 

 再次回到源代码标签能够发现项目中多了三个Ui_HelloWindow.py文本,双击该公文能够查阅我们陈设好的窗体代码

4858.com 88

点击菜单栏的开首-运营脚本(或直接开关盘F2键)

4858.com 89

在弹出的运维脚本对话框直接OK 

4858.com 90

OK后就可以知到我们刚在Qt设计师中筹划的窗体,点击关闭按键

4858.com 91

弹出对话框中一直OK,就可以关闭该程序

4858.com 92

特别周密程序

到最近我们从没编制一句代码就能够完结了程序的来得与退出

接下去大家手动给鲜明开关增多事件命令

在Eric6中的花色浏览器中找到HelloWindow.ui文本,右键点击该公文,弹出菜单中接纳转移对话框代码

4858.com 93

在弹出的窗体代码发生器窗口中式点心击新建

4858.com 94

弹出新建对话框类中输入类名后点击OK

4858.com 95

回来窗体代码发生器窗口后开始展览Button_ok(QPushButton),勾选on_Button_ok_clicked(),点击OK 

4858.com 96

在类型浏览器中能够看看源代码标签下又多了三个HelloWindow.py文件

4858.com 97

双击该文件查看程序内容。若未来F二,程序将会报错,将

from .Ui_HelloWindow import Ui_Dialog

中.Ui前面包车型大巴点去掉

from Ui_HelloWindow import Ui_Dialog

4858.com 98

保存后若F2,发现依旧分外,程序1闪而过。给源码增多以下内容

4858.com 99

 

 

保存后F2,没难题了,能够点击鲜明按键后也许会报错,是因为大家还未有告知程序点击分明开关后先后做出什么影响,修改on_Button_ok_clicked函数如下

4858.com 100

保存后F2,点击分明后Label内容展现会产生那是本身的首先个 PyQt5
程序
,一切寻常

4858.com 101

附录与后记

附图

附加图:Label控件的地点与幅度

4858.com 102

附加图:落成后的文件

4858.com 103

后记

虽说大家透过这么些实例能够感受获得PyQt伍与埃里克陆结合使用的强劲功效与极速GUI开荒的力量非比平时,不过对于刚先生接触PyQt5与埃里克陆的童鞋来说,要想表明PyQt5与埃里克陆的强有力功能与极速开采也是痴人说梦,究其原因是PyQt5与埃里克六的重组让大家只用少量的代码编写就足以兑现无数强有力的法力,大概底层的代码都不用去本身编辑,由此,PyQt5着实有力的剧情离大家很远。

本条实例就像1层窗户纸被捅破了,可是我们根本就迈可是去。所以若要真的学会PyQt五大家还需多学些PyQt五的平底内容,多手动编写1些代码。当随着大家的PyQt伍水准不断提升,到当下大家会发觉PyQt伍与埃里克六组合使用才是如虎生翼,驰骋在程序的海洋。

发表评论

电子邮件地址不会被公开。 必填项已用*标注

网站地图xml地图
Copyright @ 2010-2019 美高梅手机版4858 版权所有