python 判断屏幕等宽字符串的长度
判断屏幕等宽字符串的长度?
判断屏幕等宽字符串的长度?
【新手】重庆 - 搬砖 - NoWait 22:41:50 @北京 - BUG 开发 - 黑择明 求指点
【专家】北京 - BUG 开发 - 黑择明 22:43:04 fontMetrics
【专家】 https://pyqt.site (892768447) 22:43:54 QFontMetrics
【专家】 https://pyqt.site (892768447) 22:44:09 通过 QLabel.font ().fontMetrics () 得到
【新手】重庆 - 搬砖 - NoWait 22:52:00
https://stackoverflow.com/questions/35771863/how-to-calculate-length-of-string-in-pixels-for-specific-font-and-size
【新手】重庆 - 搬砖 - NoWait 22:53:15 感觉和 fontMetrics 应该是差不多的
【专家】北京 - BUG 开发 - 黑择明 ...
python 状态机模块
用状态来取代 if…else 判断。
GUI 涉及到挺多的状态改变,以前一直用 if…else 来判断,最近读了设计模式,发现有个状态模式,随后发现了状态机这个东西 .
python 的状态机模块挺多的,不过好像很多都不更新了.
推荐 2 个状态机模块,但是也没有太深入的使用经验,就跑跑例子,以后有更详细的 pyqt 例子再补上 .
1: pip install python-statemachine
官方例子 : https://github.com/fgmacedo/python-statemachine
2. pip install state_machine
官方例子 : https://github.com/jtushman/state_machine
1 的 最近一次更新在 6 个月以前,使用 类继承 和 mixin 方式,不过有些地方不如 2 个人性化;
2 的设计更人性化一些,包括状态改变 before 和 after , 不过由于是装饰器实现的动态增加属性,有些地方编辑器智能提示可能就靠不上了.
两者实现实现方式不一样,有兴趣可以读读源码 .
qt 内 ...
在pyqt中使用python全局钩子模块
在某些时候需要为自己的软件增加全局键盘监听,比如软件最小化隐藏后可以通过热键唤醒,又或者比如像 QQ 一样可以全局热键截图。这里介绍几个方法实现在 PyQt 中使用 Python 全局钩子模块实现全局热键功能。
pyHook3
安装命令 : pip install pyhook3
https://blog.csdn.net/q871063970/article/details/86648386
似乎将 pyhook 支持 py3 版本的了?没有太多研究.
缺点:只支持 win 平台.
2. keyboard & mouse
安装命令: pip install keyboard mouse
from PyQt5 import QtGui, QtWidgets, QtCore
from PyQt5.QtCore import *
from PyQt5.QtGui import *
from PyQt5.QtWidgets import *
import keyboard
class Window(QWidget):
def __init__(self, ...
像读文章一样读源码
使用 snoop, 像读文章一样读源码。
不得不说 开源项目没有一个提纲 , 看起来太操蛋了。问了作者, 作者说 , 你运行下主函数, 然后慢慢跟 。。。
没有目的地概览 , 不知不觉就追究到细节里面去了。
所以这一篇文章的目地就是 , 如何在没有提纲的情况下 , 能更好的只关注流程 , 而不是细节 。
开始 :
python DEBUG 模块介绍 :
前段时间看过挺多文章提到 pysoonper 这个调试模块,有兴趣的可以百度一下.
个人尝试了一下,篇幅过大的 DEBUG 不适合用 pysoonper , 因为没有缩进!
这几天偶然遇到一个二次封装的模块 snoop, 完美地解决了这个问题.
操作步骤 :
1 . 在 eric6.py 的 main() 函数上加 snoop 装饰器;
2 . 用 vscode 打开 eric6start_.log 文件 (8 层深度 log 文件 34W 行,pycharm 对大文件支持很差);
发现可以折叠 , 但是最大可折叠等级只到 5 级 , 而且无法对对应等级折叠 , 有点遗憾 。也许是.log 格式选得不 ...
python 获取子进程print信息
在 PyQt 中使用子线程读取子进程 Python 脚本的 print 输出流内容。
问题所在:
如果模块都由自己开发, 正常操作
但是因为不能改,所以只能拦截:
代码:
pythonPath = self.pythonPath_cb.currentText()
if suffix == "py":
# 首次
self.pyCommand = [pythonPath, path]
self.modifiedReloadPython(path)
def modifiedReloadPython(self, path_):
os.chdir(os.path.dirname(path_))
# 子进程调用
self.p = subprocess.Popen(self.pyCommand, stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
# self.stdoutWorker.p = self.p
self.stdoutWorker = Worker(self.p)
...
python 拷贝虚拟环境(一)
通常来说,刚开始使用 python 的时候都是把包装到全局路径,随着各个项目安装的包越来越多,之后每开始一个项目,pycharm 创建索引的时间都越来越漫长,所以不可避免得开始使用虚拟环境。
经过一番了解 ,虚拟环境的优点有这些:
改善 pycharm 索引时间;
各个项目的库不会冲突;
理论上虚拟环境可以给同版本的操作系统使用 (未试验过);
pip freeze > requestment.txt 导出的依赖清晰;
各个版本的 python 共存;
…
python 虚拟环境库除了自带的 venv , 还有三方库 virtualenv , 此外 在 virtualenv 基础上又开发了 virtualenvwrapper(virtualenvwrapper_win) 来管理
本文基于 virtualenvwrapper 创建的虚拟环境来讲解.
以下是收集的一些virtualenvwrapper配置教程:
# linux平台
https://www.cnblogs.com/netfoxman/p/5994697.html
# window平台
https://bl ...
Python调用Java对Excel截图
有的时候会遇到一些奇葩的需求,就是用 Excel 做报表,但是需要对里面的数据进行填充并生成报表图片,发送出去。这里记录用 python 调用 jar 包对 excel 文件进行公式计算和截图,数据填充可以用 xlrd 或者 openpyxl
利用 jpype 模块初始化 java 虚拟机加载 jar 包然后执行其中的功能。
# 代码
#!/usr/bin/env python
# -*- coding: utf-8 -*-
"""
Created on 2019年3月12日
@author: Irony
@site: https://pyqt5.com https://github.com/892768447
@email: 892768447@qq.com
@file: CallJava
@description:
"""
import os
import jpype
__Author__ = 'Irony'
__Copyright__ = 'Copyright (c) 2019'
def convertToImage():
Workbook = jpyp ...
FFmpeg合成加密HLS记录
记录在某个需求中要求截图并合成加密视频文件,这里采用 FFmpeg 的管道流来实现生成 HLS 加密文件。
#!/usr/bin/env python
# -*- coding: utf-8 -*-
"""
Created on 2019年3月4日
@author: Irony
@site: https://pyqt5.com https://github.com/892768447
@email: 892768447@qq.com
@file:
@description:
"""
from pathlib import Path
from subprocess import Popen, PIPE
__Author__ = """By: Irony
QQ: 892768447
Email: 892768447@qq.com"""
__Copyright__ = 'Copyright (c) 2019 Irony'
__Version__ = 1.0
# p = Popen([r'D:\soft\ffmpeg\bin\ffmpeg.exe', '-y',
# ...
多线程之守护线程和阻塞线程
如果你设置一个线程为守护线程,就表示你在说这个线程是不重要的,在进程退出的时候,不用等待这个线程退出。如果你的主线程在退出的时候,不用等待那些子线程完成,那就设置这些线程的 daemon 属性。
即在线程开始(thread.start ())之前,调用 setDeamon()函数,设定线程的 daemon 标志。
(thread.setDaemon (True))就表示这个线程 “不重要”。
如果你想等待子线程完成再退出,那就什么都不用做,或者显示地调用 thread.setDaemon (False),设置 daemon 的值为 false。新的子线程会继承父线程的 daemon 标志。
整个 Python 会在所有的非守护线程退出后才会结束,即进程中没有非守护线程存在的时候才结束。
setDaemon () 函数要放在 start 之前设置才行。
import threading
import time
def func():
print("子线程开启:", time.localtime())
time.sleep(2)
print("子线程结束:", ...
异常捕获之cgitb模块
cgitb 模块为 Python 脚本提供了一个特殊的异常管理器。名字有点误导人,它最初设计是为了以 HTML 格式展示 cgi 脚本的大量异常信息。后来,他扩展为也可以展示纯文本信息。该模块激活后,如果发生了未捕获的异常,将会展示格式化的输出报告。该报告包括源代码每一层的回溯,以及当前执行程序的参数和局部变量。以及,你可以选择将这些信息存到一个文件里,而不是发送到浏览器。
# 用途
当编辑器中无法显示错误信息时,尤其是 PyQt ,可以尝试在 cmd 中运行代码,或者使用此模块来得到错误信息。
# 介绍
# cgitb.enable
cgitb.enable(display=1, logdir=None, context=5, format="html")
参数说明
display 1,发送至浏览器;0, 不发送
logdir 如果有的话,写到该目录下
context 显示错误代码周围的代码行数
format 是否显示为 HTML,除了’html’之外的所有值,都会显示为纯文本
# cgitb.handle
cgitb.handle(info=None)
参数说明
如果你 ...