PyQt5的学习

花费了一个下午把PyQt5大概的学习了下。找了一个教程 PyQt5教程 跟着挨着把上面的案例做了一遍,大概知道PyQt5是如何生成窗体,以及控件的。基本上做到如果有需求要实现,查查手册,搜搜百度能实现的水平。

另外强烈推荐:PyQt5图形界面编程

PyQt5就是python的GUI库,用它来做一些桌面软件,是QT的python版本。具体的简介就不赘述了。记录点自己学习的干货。

使用大概流程

首先当然是安装PyQt5的类库

pip3 install PyQt5

PyQt5的使用

import sys
from PyQt5.QtWidgets import QApplication, QWidget
from PyQt5.QtGui import QIcon class Example(QWidget): def __init__(self):
super().__init__()
self.initUI() #界面绘制交给InitUi方法 def initUI(self):
#设置窗口的位置和大小
self.setGeometry(300, 300, 300, 220)
#设置窗口的标题
self.setWindowTitle('Icon')
#设置窗口的图标,引用当前目录下的web.png图片
self.setWindowIcon(QIcon('web.png'))
#显示窗口
self.show() if __name__ == '__main__':
#创建应用程序和对象
app = QApplication(sys.argv)
ex = Example()
sys.exit(app.exec_())

然后几乎就可以跑出来一个窗体了。至于窗体上的设置,几乎看着英语就能知道如何写。比如

self.setWindowTitle('设置标题')
self.setWindowIcon(QIcon('web.png')) #设置icon图标

常见的组件

  1. QCheckBox
  2. QPushButton
  3. QSlider
  4. QProgressBar
  5. QCalendarWidget
  6. QPixmap
  7. QLineEdit
  8. QSplitter
  9. QComboBox

以上是这个教程上讲到的控件。控件部分个人认为不需要花费时间去研究,如果用到了查查,经常用到了,自然能记得住。没必要深入研究。

要使用一个组件,直接实例化,然后parent指定为当前的对象。就会出现在当前对象上

button = QButton('按钮名称',self)
#然后设置一些组件的特性并且把组件触发的时间插入插槽就可以了,插槽接下来讲解
button.move(200,100)
button.clicked.connect(self.button_click)

信号和插槽 Signal&slot

这个应该算是重点了,因为UI最后还是要接受用户的点击、输入,要有事件产生并且能有处理事件的函数和方法。类似C#中的事件委托一样。

插槽

要处理一个事件,比如一个按钮的事件我们用插槽接受事件信号。如下伪代码

button.clicked.connect(self.button_click)

#插槽
def button_click(self):
#被点击执行的代码
#信号的发送者
sender = self.sender()

信号与发出信号

#我们需要定义一个发送信号的对象
class Communicate(QObject):
closeApp = pyqtSignal() #在发送信号的窗体类代码
class Example(QMainWindow):
def __init__(self):
self.c = Communicate() def mousePressEvent(self, event):
#出发信号的发送
self.c.closeApp.emit()

另外还有几个问题需要进一步思考:

  1. 发送如何写在类中,比如自定义一个控件,然后这个类出发事件,可以给别的类调用实例化的对象的时候处理?
  2. 信号槽如何发送带参数的消息。

对话框

  1. QInputDialog
  2. QColorDialog
  3. QFontDialog
  4. QFileDialog
  5. QMessageBox

个人认为对话框没有太多需要讲解的。用到了查查,知道如何弹出,如何获得弹出后操作的结果就可以了。

关于窗体如何弹出。每一个集成了QWidget的窗体,都会有一个show方法,在需要弹出的地方调用他们就可以弹出了。

模态窗体

方法 说明
setWindowModality() Qt.NonModal:非模态,可以和程序的其他窗口进行交互
Qt.WindowModal:窗口模态,程序在未处理玩当前对话框时,将阻止和对话框的父窗口进行交互
Qt.ApplicationModal:应用程序模态,阻止和任何其他窗口进行交互

绘图

如果要自定义控件,少不了需要做绘图。

python的控件会自动调用paintEvent事件。所以只需要调用paitEvent事件,就可以做到绘图。

 def paintEvent(self, event):
qp = QPainter()
qp.begin(self)
self.drawText(event, qp)
qp.end()

而paintEvent会在需要控件重绘的时候,进行调用,如果要强制重汇。需要在这个方法中调用:

.update()

自定义控件

通过可视化的方法设计GUI

参考

PyQt5-简明中文教程

Qt5文档

PyQt5图形界面编程

vnpy源码阅读学习(2):学习PyQt5的更多相关文章

  1. vnpy源码阅读学习(1):准备工作

    vnpy源码阅读学习 目标 通过阅读vnpy,学习量化交易系统的一些设计思路和理念. 通过阅读vnpy学习python项目开发的一些技巧和范式 通过vnpy的设计,可以用python复现一个小型简单的 ...

  2. vnpy源码阅读学习(3):学习vnpy的界面的实现

    学习vnpy的界面的实现 通过简单的学习了PyQt5的一些代码以后,我们基本上可以理解PyQt的一些用法,下面让我们来先研究下vnpy的UI部分的代码. 首先回到上一节看到的run.py(/vnpy/ ...

  3. vnpy源码阅读学习(4):自己写一个类似vnpy的UI框架

    自己写一个类似vnpy的界面框架 概述 通过之前3次对vnpy的界面代码的研究,我们去模仿做一个vn.py的大框架.巩固一下PyQt5的学习. 这部分的代码相对来说没有难度和深度,基本上就是把PyQt ...

  4. vnpy源码阅读学习(5):关于MainEngine的代码阅读

    关于MainEngine的代码阅读 在入口文件中,我们看到了除了窗体界面的产生,还有关于MainEngine和EventEngin部分.今天来学习下MainEngine的代码. 首先在run代码中,我 ...

  5. vnpy源码阅读学习(8):关于app

    关于app 在入口程序中,我们看到了把 gateway,app, 各类的engine都添加到mainEngine中来.不难猜测gateway主要是处理跟外部的行情,接口各方面的代码,通过别人的文章也不 ...

  6. vnpy源码阅读学习(9)回到OptionMaster

    回到OptionMaster 根据我们对APP调用的代码阅读,我们基本上知道了一个APP是如何被调用,那么我们回到OptionMaster学习下这个APP的实现. 看看结构 class OptionM ...

  7. vnpy源码阅读学习(7):串在一起

    串在一起 我们已经分析了UI.MainEngine.EventEngine.然后他们几个是如何发挥作用的呢?我总结了一张图: 我们来具体的看看UI部分是如何跟EventEngine穿插起来的 \exa ...

  8. Kubernetes 学习(九)Kubernetes 源码阅读之正式篇------核心组件之 Scheduler

    0. 前言 继续上一篇博客阅读 Kubernetes 源码,参照<k8s 源码阅读>首先学习 Kubernetes 的一些核心组件,首先是 kube-scheduler 本文严重参考原文: ...

  9. 搭建 Spring 源码阅读环境

    前言 有一个Spring源码阅读环境是学习Spring的基础.笔者借鉴了网上很多搭建环境的方法,也尝试了很多,接下来总结两种个人认为比较简便实用的方法.读者可根据自己的需要自行选择. 方法一:搭建基础 ...

随机推荐

  1. Python--day19--os模块

    os模块 os模块是与操作系统交互的一个接口 os.makedirs('dirname1/dirname2') 可生成多层递归目录 os.removedirs('dirname1') 若目录为空,则删 ...

  2. 2012-2013 Northwestern European Regional Contest (NWERC 2012)

    B - Beer Pressure \(dp(t, p_1, p_2, p_3, p_4)\)表示总人数为\(t\),\(p_i\)对应酒吧投票人数的概率. 使用滚动数组优化掉一维空间. 总的时间复杂 ...

  3. 【BZOJ 1004】 [HNOI2008]Cards

    [题目链接]:http://www.lydsy.com/JudgeOnline/problem.php?id=1004 [题意] 给你sr+sb+sg张牌,(令n=sr+sb+sg),让你把这n张牌染 ...

  4. 总结thinkphp快捷查询getBy、getField、getFieldBy用法及场景

    thinkphp作为国内现阶段最成熟的框架:没有之一: 不得不说是有好些特别方便的方法的: 然而如果初接触thinkphp的时候难免会被搞的有点迷茫: for example这些: getBy get ...

  5. Activiti工作流引擎学习(一)

    1.部署对象和流程定义相关表:RepositoryService act_re_deployment: 部署对象表:一次部署的多个文件的信息,对于不需要的流程可以删除和修改 act_re_procde ...

  6. git常用常用操作指令

    GIT操作 1:git init 初始化空的仓库,会在当前文件夹生成一个隐藏.git的文件夹,相当于一个仓库. 2:提交代码的流程:工作代码区-->暂存区 -->主仓库 -->服务器 ...

  7. Vue CLI 创建项目

    使用命令创建VUE项目 运行以下命令[vue create [项目名]]来创建一个新项目: vue create hello-world 警告 如果你在 Windows 上通过 minTTY 使用 G ...

  8. C语言中的优先级和类型转换分析

    一.优先级 1.易错的优先级 二.类型转换 在C语言中,存在强制类型装换,也存在隐式类型转换,隐式类型转换实际上属于强制类型转换,隐式类型转换要点如图. (1)举例:算术运算式中,低类型转换为高类型 ...

  9. python单例设计模式

    class Dog(object): __instance = None def __init__(self): pass def __new__(cls): if not cls.__instanc ...

  10. 机器学习- Numpy基础 吐血整理

    Numpy是专门为数据科学或者数据处理相关的需求设计的一个高效的组件.听起来是不是挺绕口的,其实简单来说就2个方面,一是Numpy是专门处理数据的,二是Numpy在处理数据方面很牛逼(肯定比Pytho ...