vnpy源码阅读学习(2):学习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图标

常见的组件

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

要使用一个组件,直接实例化,然后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()

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

对话框

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

关于窗体如何弹出。每一个集成了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

Original: https://www.cnblogs.com/bbird/p/12192699.html
Author: bbird2018
Title: vnpy源码阅读学习(2):学习PyQt5

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/685127/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • 线段树建造

    1、由于二叉树的自身特性,对于每个父亲节点的编号 i,他的两个儿子的编号分别是 2i 和 2i+1,所以我们考虑写两个 O(1) 的取儿子函数: inline int ls(int…

    技术杂谈 2023年7月11日
    065
  • unity luaFramework

    1 AppConst: DebugMode: 调试模式,true:lua脚本直接读取自AssetDir,false:开始会将AssetDir内的lua脚本复制到Util.DataP…

    技术杂谈 2023年5月31日
    081
  • 简单易懂讲文件

    注意事项 如果运行代码的时候找不到文件,但是文件的的确确又存在,检查下 idea 的工作路径 路径 Path Path 对象是将一个路径封装成一个对象,然后通过这个对象来执行路径的…

    技术杂谈 2023年7月25日
    078
  • 为什么delete后磁盘空间没有释放而truncate会释放?

    背景 因项目需求,需要清理一批旧数据,腾出空间给新数据,让同事负责这件事。料想会很顺利,但很快找到我,并告知在postgresql中把一张大的数据表删除掉了,查询表的size并没有…

    技术杂谈 2023年5月31日
    089
  • 关于提问

    A 和 B 对话如下: A: xx 产品,一个月一个版本,只包含一个小功能,培训销售的工作跟不上怎么办?培训工作跟不上,研发做的功能前端都不知道,那做了有什么用?为什么不规划成大版…

    技术杂谈 2023年7月11日
    087
  • 网络工程试验(一)链路聚合的三种情况

    复习一下华为基础的数通命令吧,原创文章,可能有技术理解错误,欢迎指正,请与我联系,谢谢! 介绍-链路聚合(eth-trunk) 将交换机两条或以上的二层物理接口绑定为一条逻辑接口:…

    技术杂谈 2023年6月21日
    089
  • linux服务器端多进程代码-服务器/客户端一对多

    一、多进程服务器代码 #include #include #include #include<string.h> #include /* See NOTES */ #i…

    技术杂谈 2023年7月11日
    082
  • Java正则表达式Pattern和Matcher类详解

    概述 Pattern类的作用在于编译正则表达式后创建一个匹配模式. Matcher类使用Pattern实例提供的模式信息对正则表达式进行匹配 Pattern类 常用方法及介绍 Pa…

    技术杂谈 2023年7月24日
    063
  • 关于戴德金分割的几点思考

    谨以此文纪念杨振宁、李政道先生获得诺贝尔物理学奖60周年. 由无理数引发的数学危机一直延续到19世纪,直到1872年,德国数学家戴德金从连续性的要求出发,用有理数的”分…

    技术杂谈 2023年5月31日
    080
  • 产品安全合规评估工具

    CIS Benchmark : https://www.cisecurity.org/cis-benchmarks/ Original: https://www.cnblogs.c…

    技术杂谈 2023年5月31日
    093
  • PriorityQueue优先级队列

    一、用法 先说结论,JAVA中默认是小根堆,即小的在堆顶(poll时小的出去) 接下来看下默认的最小堆写法 PriorityQueue queue = new PriorityQu…

    技术杂谈 2023年6月1日
    081
  • Uniscribe文字自动换行

    我们获得了每个字形的宽度数组piAdvances,以及这个RUN所占用的总宽度abc。 piVdvances对应于每个字符,它取得了每个字形所占用宽度。 如果我们以行为单位来绘制文…

    技术杂谈 2023年5月31日
    063
  • 你应该知道的LightGBM各种操作!

    LightGBM是基于XGBoost的一款可以快速并行的树模型框架,内部集成了多种集成学习思路,在代码实现上对XGBoost的节点划分进行了改进,内存占用更低训练速度更快。 本文内…

    技术杂谈 2023年5月31日
    076
  • 移动端兼容适配?

    手淘团队的一套flexible.js, 自动判断dpr进行整个布局视口的放缩 Original: https://www.cnblogs.com/programb/p/140688…

    技术杂谈 2023年5月31日
    0106
  • pip3安装库时报超时问题小结

    在Linux测试服务器上使用pip3安装组件时,遇到下面错误: 查了一下相关资料弄清楚了这个错误出现的原因:一般出现这个错误跟本地网络状况或配置有关。一般而言,你可能默认使用了国外…

    技术杂谈 2023年5月31日
    087
  • 《深度工作:如何有效使用每一点脑力》读后感

    空闲时间阅读了一下《深度工作:如何有效使用每一点脑力》,作为一个沉迷网络的人,已经很难有聚精会神的时候,所以阅读此书,记录一下读后感,争取应用到生活当中。全书分为两个方面进行说明:…

    技术杂谈 2023年6月21日
    078
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球