使用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,选择【生成对话框代码】。

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


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


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

# -*- 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


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

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

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


按钮2被按下的效果图:


评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值