用PyQt做点实用工具

用PyQt做点实用工具


现在在做一个用PyQt结合openCV的智能剪切小工具。

这篇博客涉及的知识点包括:


PyQt设计gui的基本流程。

Opencv边缘检测

使用配置文件保存变量


目前已经实现了剪切功能。界面如下:





PyQt制作GUI的基本流程(以我设计这个小工具为例):

1,首先导入需要的相关模块,PyQt。


2,先定义一个主类,这个主类中的所封装的所有内容通过show函数显示。

初始化变量,顾名思义就是一运行代码就会首先处理的一些事件,不需要任何触发,所以这里面不应该存放一些经常改变的具体变量。

 class MainCrop(QMainWindow):
    def __init__(self,parent =None):
        QMainWindow.__init__(self,parent)
        self.setWindowTitle(u'欢迎使用智能剪切板')
        self.resize(580,388)
        self.picture =Qlabel() #这个初始化一个基,主要看你来做什么,如果做文字编辑器,就应该是QTextEdit。我要做的是用Qlabel显示图片。
self.initUi




这段代码是初始化变量。

在PyQt中,所以class都是从QObject派生而来,QWidget对象就可以有一个parent。这种parent-child关系主要用于两个方面:

  1. =没有parent的QWidget类被认为是最上层的窗体(通常是MainWindow),由于MainWindow的一些操作生成的新窗体对象,parent都应该指向MainWindow。
  2. 由于parent-child关系的存在,它保证了child窗体在主窗体被回收之时也被回收。

parent作为构造函数的最后一个参数被传入,但通常情况下不必显示去指定parent对象。因为当调用局管理器时,部局管理器会自动处理这种parent-child关系。但是在一些特殊的情况下,我们必须显示的指定parent-child关系。如当生成的子类不是QWidget对象但继承了QObject对象,用作dock widgets的QWidget对象。

我们可以看到,对象之间有了依赖和生命周期,把IOC容器运用到GUI编程中是自然而然的事情了。(http://blog.csdn.net/thumb3344/article/details/5644789)

初始化的部分其实到这里完成了它的使命,后来再需要一些变量可以在添加。

3,接下来初始化窗体,和初始化变量不同的是,这里要添加一些关于菜单栏,状态栏等相关操作。

def initUi(self):
        self.setWindowIcon(QtGui.QIcon('images/crop.png'))
        #================右键菜单
        self.contextMenu = QMenu(self)
        self.contextMenu.addAction(self.OpenAction)
        #===============菜单,工具栏
        self.createMenuBars()
        self.createToolBars()
如何就是一些触发机制了,PyQt中称为信号与槽。就是点击通俗一点来讲就是通过点击这个命令,触发一些动作。比如,打开,保存,编辑...

4,为了可视化,我们将这些命令放在不同的菜单当中。

下面介绍菜单和工具栏,右键命令。

菜单栏:

 def createMenuBars(self):
        file =self.menuBar().addMenu(u'文件')
        file.addAction(self.OpenAction)
工具栏:

def createToolBars(self):
        self.toolBar = self.addToolBar("")
        self.toolBar.addAction(self.OpenAction)

右键:

self.contextMenu = QMenu(self)
        self.contextMenu.addAction(self.OpenAction)

5,不难发现,我这里是通过addAction来建立菜单与事件的联系的。因为我这里的信号是各个菜单,所以通过这种方式比较方便。如果是一个实例按钮,可以通过connect函数。

self.connect(self.button, QtCore.SIGNAL("clicked()"),
                   QtGui.qApp, QtCore.SLOT("quit()"))

addAction就是添加这个菜单的显示,快捷键,触发事件等一系列组合在一起的事件。

我通过一个例子来理解这个事件。

上面有一个事件:

self.OpenAction

要构造OpenAction这个函数:

self.OpenAction = QAction(QtGui.QIcon('images/open.png'), u"&打开...",
                                       self, shortcut=QtGui.QKeySequence.Open,
                                       statusTip=u"打开文件",triggered=self.openFileEvent)
这里面包括了菜单实例的图标,显示的标识,快捷键,会自带一些常用的快捷键,比如open,cut,save。这时只需要调用相应的内部函数:
QtGui.QKeySequence.Open

如果不是常用的快捷键,自己也可以设置。

shortcut="Ctrl+A"

状态提示信息,如果没有添加菜单栏这个显示信息会显示在鼠标悬浮的位置,如果添加状态栏,

状态栏也会显示该信息,最后一个是触发事件,是一个自己构造的函数,也有些是自带的函数。比如,关闭窗口事件,self.close。

这个函数是不需要例外构造的。

其他的都是一些重复的代码,添加不同的菜单,对应不同的事件。

6,最后添加以下代码。

app =QApplication(sys.argv)
ui = MainCrop()
ui.show()
app.exec_()
每个Qt必须有一个app, QApplication包含一个主循环, 并处理从窗口系统进来事件。QWidget如果没有指定父, 那么它就是顶级窗口










  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
PyQt是一个用于创建图形用户界面(GUI)的库,它是Qt应用程序框架的Python绑定。在PyQt中,有一些常用的工具和组件可以帮助我们进行GUI设计和开发。以下是一些常用的PyQt设计工具的介绍: 1. Qt Designer:Qt Designer是一个可视化GUI设计工具,它可以帮助我们通过拖放方式创建和布局GUI界面。我们可以在Qt Designer中添加各种控件、设置属性和信号槽等。设计完成后,可以将设计好的界面保存为.ui文件,然后在Python代码中使用PyQt加载和使用该界面。 2. PyQt Widgets:PyQt提供了丰富的预定义控件,可以用于创建各种GUI界面。这些控件包括按钮、文本框、标签、列表框、下拉框等等。我们可以使用这些控件来构建用户界面,并通过设置属性和信号槽来实现交互功能。 3. Layouts(布局):布局是用于管理和控制控件在窗口中的位置和大小的工具。PyQt提供了多种布局方式,如水平布局(QHBoxLayout)、垂直布局(QVBoxLayout)、网格布局(QGridLayout)等。通过使用布局,我们可以自动调整控件的位置和大小,使界面更加灵活和适应不同的窗口大小。 4. 事件处理:PyQt允许我们通过信号槽机制来处理用户界面中的事件。我们可以连接控件的信号(如按钮的点击事件)到自定义的槽函数,从而实现对事件的响应和处理。这样可以使用户界面与后台逻辑进行交互。 5. 样式表:PyQt支持使用CSS样式表来设置控件的外观和样式。我们可以通过设置样式表来改变控件的颜色、字体、边框等属性,从而实现界面的美化和个性化。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值