更多

在上一篇文章中,我们已经把eric安装配置完毕,本文将继续这一话题,介绍如何使用eric创建一个PyQt项目。在这个项目中,我们实现了两个能够修改标签文字的按钮和一个可以关闭对话框的按钮。

1.新建项目

打开eric,点击【项目】-【新建】,会弹出如下的对话框。这里我们创建一个名为pyqtdemo的项目。注意,在创建项目时,eric不会自动根据填写的项目名称修改项目文件夹名称!

点击确定之后,可以看到一个源代码树中只有__init__.py的项目。当然,此时eric还创建了几个文件,并不会在这里显示出来,他们分别是项目文件”pyqtdemo.e4p”和”_eric4project”文件夹。

2.新建窗体

将左侧的【源代码】选项卡切换至【窗体】选项卡(左数第二个)。

右键空白区域,选择【新建窗体】。

在弹出的对话框中选择【对话框】。

在弹出的文件对话框中,选择文件位置,并填写文件名称。这里,我们将其命名为pyqtdemo.ui。

确定后,就可以看到【窗体】选项卡中,有一个pyqtdemo.ui文件了。

3.设计窗体

右键点击“pyqtdemo.ui”文件,选择【在Qt设计师中打开】,我们将一睹Qt Designer的芳容。

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

菜单栏:包括文件、编辑、窗体、视图、设置、窗口和帮助。

工具栏:包括文件操作、部件前后置、编辑窗口部件、编辑信号/槽、编辑伙伴、编辑Tab顺序、布局方式、调整大小等。

部件栏:包括各种可用部件。

窗体设计区域

对象查看器:可以查看各部件对象关系树及其所属的类

属性编辑器

信号/槽编辑器

动作编辑器

资源编辑器

3.1 修改窗体属性

默认的窗体属性中,objectName(部件名称,其他程序引用时使用)默认为Dialog,windowTitle(窗体标题)默认也是Dialog。我们可以根据自己的需要,对对话框的各个属性进行修改。这里,我只修改了windowTitle为“PyQt Demo”,并改变了其大小。

3.2 添加部件

从左侧的widget box中拖出3个PushButton,1个label。修改它们的objectName、text等属性。其中3个PushButton的ObjectName分别为btn1、btn2、btnClose。

添加后的效果图,如下图所示:

4.信号与槽

4.1 概念

在PyQt4中,事件处理的相关术语为“信号(signal)”和“槽(slot)”。

信号的含义就是我们常说的事件,比如按钮被按下、复选框勾选状态变更、可输入文本框文本变更等等。

槽的含义则是事件处理函数,比如关闭窗体、隐藏窗体、最大/小化、设置焦点、重绘等。

4.2 使用一个自带的槽

我们从工具栏中,选择【编辑信号/槽】。

拖动要编辑的部件,会出现一个类似于电路中接地符号的标志,并弹出对话框:

这里,我们选择clicked(),即按钮被按下,此时看到右侧可选的槽并不多,并且没有我们希望使用到的关闭功能。

勾选【显示从QWidget继承的信号和槽】,这时可以发现,右侧的槽多了很多。在其中找到close(),点击确定。此时,点击【关闭】按钮执行对话框关闭的功能就已经实现了。

下图是已经创建了【关闭】按钮槽之后的窗体设计图。

4.3 第一次运行

虽然只实现了一个关闭功能,但是还是让我们先来看看如何运行这个到目前为止一行代码都没有写过的程序吧。

现在回到eric的界面,右键“pyqtdemo.ui”,选择【编译窗体】。

短暂的时间过后,可以看到如上图的编译成功提示。这时,我们切换到【源代码】选项卡,可以看到一个名为Ui_pyqtdemo.py的文件,这就是根据刚才那个ui文件自动编译而成的,我们不需要对其进行任何修改,也不应当对其进行任何修改,因为,任何对这种文件,在下次编译后,之前的修改会全部不存在。

看,下图,就是我们第一次运行时的场景。在eric里,我们可以F2直接运行,或F5进行调试。

当我按下【关闭】的时候,窗体就会被关闭。

4.4 创建一个自定义槽

使用自带槽的方式很简单,然而,它所能实现的功能也是有限的,在我们的开发中,绝大多数信号发生时,不会使用默认的槽。因此,这一小节将通过按钮1、2的实现来介绍如何创建一个自定义槽。

自定义槽,就要求自己写其中的槽函数,而之前的操作中,我们还没有动手写过一次代码,那么这个槽的代码写在哪里呢?

我们再切换回【窗体】选项卡,右键pyqtdemo.ui,选择【生成对话框代码】。

首先,点击【新建】,新建一个类,在这里可以修改类名、文件名和路径。

然后在下面的选框中,选择自己需要使用到的信号。比如,我的选择如下图所示,是两个按钮被按下时的信号:

这时,就生成了一个默认的代码。

自动生成的Pyqtdemo.py代码

Python

# -*- coding: utf-8 -*-

"""

Module implementing Pyqtdemo.

"""

from PyQt4.QtGui import QDialog

from PyQt4.QtCore import pyqtSignature

from Ui_pyqtdemo import Ui_Dialog

class Pyqtdemo(QDialog, Ui_Dialog):

"""

Class documentation goes here.

"""

def __init__(self, parent = None):

"""

Constructor

"""

QDialog.__init__(self, parent)

self.setupUi(self)

@pyqtSignature("")

def on_btn1_clicked(self):

"""

Slot documentation goes here.

"""

# TODO: not implemented yet

raise NotImplementedError

@pyqtSignature("")

def on_btn2_clicked(self):

"""

Slot documentation goes here.

"""

# TODO: not implemented yet

raise NotImplementedError

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

30

31

32

33

34

35

36

37

38

# -*- coding: utf-8 -*-

"""

Module implementing Pyqtdemo.

"""

fromPyQt4.QtGuiimportQDialog

fromPyQt4.QtCoreimportpyqtSignature

fromUi_pyqtdemoimportUi_Dialog

classPyqtdemo(QDialog,Ui_Dialog):

"""

Class documentation goes here.

"""

def__init__(self,parent=None):

"""

Constructor

"""

QDialog.__init__(self,parent)

self.setupUi(self)

@pyqtSignature("")

defon_btn1_clicked(self):

"""

Slot documentation goes here.

"""

# TODO: not implemented yet

raiseNotImplementedError

@pyqtSignature("")

defon_btn2_clicked(self):

"""

Slot documentation goes here.

"""

# TODO: not implemented yet

raiseNotImplementedError

对这个代码进行修改,实现预期的内容。

修改后的pyqtdemo.py文件代码

Python

# -*- coding: utf-8 -*-

import sys

from PyQt4 import QtGui

from PyQt4 import QtCore

from Ui_pyqtdemo import Ui_Dialog

class Pyqtdemo(QtGui.QDialog, Ui_Dialog):

def __init__(self, parent = None):

QtGui.QDialog.__init__(self, parent)

self.setupUi(self)

@QtCore.pyqtSignature("")

def on_btn1_clicked(self):

self.label.setText(u"按钮1被按下!")

@QtCore.pyqtSignature("")

def on_btn2_clicked(self):

self.label.setText(u"按钮2被按下!")

if __name__ == "__main__":

app = QtGui.QApplication(sys.argv)

dlg = Pyqtdemo()

dlg.show()

sys.exit(app.exec_())

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

# -*- coding: utf-8 -*-

importsys

fromPyQt4importQtGui

fromPyQt4importQtCore

fromUi_pyqtdemoimportUi_Dialog

classPyqtdemo(QtGui.QDialog,Ui_Dialog):

def__init__(self,parent=None):

QtGui.QDialog.__init__(self,parent)

self.setupUi(self)

@QtCore.pyqtSignature("")

defon_btn1_clicked(self):

self.label.setText(u"按钮1被按下!")

@QtCore.pyqtSignature("")

defon_btn2_clicked(self):

self.label.setText(u"按钮2被按下!")

if__name__=="__main__":

app=QtGui.QApplication(sys.argv)

dlg=Pyqtdemo()

dlg.show()

sys.exit(app.exec_())

这里的修改中,其一是对import语句进行了修改,因为在一般的编程中,可能会用到QtGui和QtCore的多个类,并且默认代码的写法也可能造成命名空间的污染;其二是对于按钮被按下的状态添加了修改label文字内容的槽函数;其三,添加了窗体运行代码(见之前的文章)。

下面是按钮1被按下时候的效果图:

按钮2被按下的效果图:

python pyqt eric_使用eric创建一个PyQt项目相关推荐

  1. 把python37添加到环境变量配置_关于在win 10上成功创建一个Django项目时遇到django-admin的手动配置环境变量问题。...

    前言 初学Python Web 在创建第一个Djang项目的时候出现了很多的问题,今天和大家分享并记录一下这次艰难的历程! 一.官网下载Python以及安装Django 1.Python的下载安装 链 ...

  2. 创建python虚拟环境,安装django,创建一个django项目,在项目中创建一个应用(ubuntu16.04)...

    一.创建python虚拟环境 首先,为什么要创建python的虚拟环境? 因为,在实际的项目开发中,每个项目使用的框架库并不一样,或使用框架的版本不一样,这样需要 我们根据需求不断的更新或卸载相应的库 ...

  3. python虚拟环境中安装diango_创建python虚拟环境,安装django,创建一个django项目,在项目中创建一个应用(ubuntu16.04)...

    一.创建python虚拟环境 首先,为什么要创建python的虚拟环境? 因为,在实际的项目开发中,每个项目使用的框架库并不一样,或使用框架的版本不一样,这样需要 我们根据需求不断的更新或卸载相应的库 ...

  4. 初学者用pycharm创建一个django项目和一个app时需要注意的事项

    目录 如何新建一个djiango项目: 如何创建一个app: 如何启动一个django项目: 新建一个django项目,需要注意以下几项配置: 如何新建一个djiango项目: 1.在pycharm中 ...

  5. Django从理论到实战(part3)--创建一个Django项目

    学习笔记,仅供参考 本系列Blog以应用为主,理论基础部分我在后端专栏的Django系列博客已经写过了,如果有些需要补充的知识点,我会在这个系列中,尽量详细的写一下. 文章目录 创建一个Django项 ...

  6. 安装Vue node 及 创建一个Vue 项目

    安装Vue 和 node 及 创建一个Vue 项目 一 下载node.js安装包 1 下载资源包,然后安装 2 点击以上的Run(运行),将出现如下界面,然后一直点击Next 直达安装完成 3 检测P ...

  7. 树莓派Android Things物联网开发:创建一个Things项目

    [转载请注明出处:http://blog.csdn.net/leytton/article/details/77854144] <树莓派Android Things物联网开发>系列文章专栏 ...

  8. Maven如何用Eclipse创建一个Maven项目【笔记自用】

    1.Maven的安装与设置环境变量 想要创建一个Maven项目需要先安装Maven,并且设置好环境变量 去下载Maven 设置环境变量 新建变量MAVEN_HOME,值为Maven的目录X:\XXX\ ...

  9. 创建一个springMVC项目总结

    创建一个springMVC项目总结 1.如何搭建起一个Spring mvc的环境并运行程序. 参考:http://www.cnblogs.com/bigdataZJ/p/springmvc1.html ...

最新文章

  1. 英特尔分布式深度学习平台Nauta-安装、配置与管理指南
  2. HTML为什么认为“ chucknorris”是一种颜色?
  3. python中读取文件内容-Python从文件中读取数据(2)
  4. 异部时钟电路的FPGA设计
  5. 【java8新特性】——方法引用(四)
  6. 使用sklearn优雅地进行数据挖掘
  7. SVO实时全局光照优化(里程碑MK2):Sparse Voxel Octree based Global Illumination (SVO GI)...
  8. nginx 小简单指令
  9. 【毕业设计】基于stm32的语音识别 - 单片机 嵌入式 物联网 语音识别
  10. 【原创抖音互动无人直播项目大鱼吃小鱼,进入直播间的用户开始吃鱼,吃的鱼越多等级越高越厉害】
  11. Spy++ —— 窗口、消息查看分析利器
  12. AEG 2A 400-280 HFRL1
  13. 禾穗HERS | 不结婚就不孝?催婚季必备三招快学起来!
  14. 如何用JS刷新当前页面
  15. FME大规模转换OSM PBF数据
  16. C# 按Button弹出新的窗体 Show()方法 和 ShowDialog()方法
  17. 从 Forces 开始分析责任链模式:「写一个 Discord 对话机器人」
  18. Python有什么用?Python 的 10 个实际用途
  19. 解决电脑按字母键出现数字的方法
  20. vc++ 2005 发布程序

热门文章

  1. 解决office套件打开卡顿白屏的问题
  2. 《软件性能测试、分析与调优实践之路》学习
  3. 随写--2.使用WeTab新标签页定制属于你的新标签页
  4. firfox新标签页打开的设置与优化
  5. DateTimePicker 日期时间选择器,清空事件。并添加默认当前时间,向前推进7天的事件
  6. python selenium 安装教程 一看就懂!!!
  7. java枚举转json
  8. 罗曼冲牙器W6维修记录
  9. Mac os系统如何自定义系统偏好设置面板?
  10. dct变换可以用什么方法代替_什么是DCT变换?为什么要进行DCT变换?