【GUI-pyqt5】QObject类
1. QObject模块详解
1.1 描述
所有Qt对象的父类
1.2 功能和作用
1.2.1 对象名称和属性
1.2.1.1 API
API | 功能 | 备注 | ||||||
---|---|---|---|---|---|---|---|---|
| | | ||||||
| | | ||||||
| | | ||||||
| | | ||||||
| | |
1.2.1.2 应用场景
- 用于qss的ID选择器,属性选择器,方便统一设置样式
- 用于装饰器的信号与槽
1.2.1.3 使用案例1
from PyQt5.Qt import *
import sysclass Window(Qwidget):def __init__(self):"""初始化方法"""super().__init__()# 设置窗口大小self.resize(500, 500)# 设置窗口标题栏名称self.setWindowTitle("Object")self.initUI()def initUI(self):"""调用方法"""# self.QObject_text()self.QObject_caozuo()def QObject_text(self):"""QObject模块学习"""# 查看QObject继承父类mros = QObject.mro()for mro in mros:print(mro)def QObject_caozuo(self):"""测试API方法"""obj = QObject()# 给QT对象设置一个名称obj.setObjectName('notice')print(obj.objectName())# 给QT对象动态添加一个属性与值obj.setProperty('notice_level', 'error')obj.setProperty('notice_level1', 'Info')print(obj.property('notice_level1'))# 获取一个对象中所有通过setProperty()设置的属性名称print(obj.dynamicPropertyNames())if __name__ == '__main__':app = QApplication(sys.argv)window = Window()window.show()sys.exit(app.exec_())
运行结果:
1.2.1.4 使用案例2
要求: 创建多个用于信息提示的QLabel
- 凡是提示的QLabel控件,都要求设置①字体大小为25px;②字体颜色为灰色;③边框圆角为8px;
- 信息提示分为多个级别①正常(normal):绿色字体及边框;②警告(warning):黄色字体及边框;③错误(error):红色字体及边框;
QObject.qss文件
QLabel#notice {font-size: 20px;color: gray;border: 1px solid gray;border-radius: 8px;
}
QLabel#notice[notice_level="normal"] {color: green;border-color: green;
}
QLabel#notice[notice_level="warning"] {color: yellow;border-color: yellow;
}
QLabel#notice[notice_level="error"] {color: red;border-color: red;
}
qss_test.py文件
from PyQt5.Qt import *
import sysclass Window(QWidget):def __init__(self):"""Qt初始化"""super().__init__()self.setWindowTitle('QSS案例')self.resize(500, 500)self.initUI()def initUI(self):"""Qt API方法调用函数"""# 调用QSS测试方法self.qss_style()# 调用加载QSS样式表方法self.QSS_test()def QSS_test(self):"""QSS初体验"""# 设置label1样式label1 = QLabel(self)label1.setText('normal')label1.setObjectName('notice')label1.setProperty('notice_level', 'normal')# 设置label2样式label2 = QLabel(self)label2.setText('warring')label2.setObjectName('notice')label2.setProperty('notice_level', 'warring')label2.move(100, 0)# 设置label3样式label3 = QLabel(self)label3.setText('error')label3.setObjectName('notice')label3.setProperty('notice_level', 'error')label3.move(200, 0)def qss_style(self):"""加载qss样式函数"""with open('./QObject.qss', 'r') as f:qApp.setStyleSheet(f.read())if __name__ == '__main__':app = QApplication(sys.argv)window = Window()window.show()sys.exit(app.exec_())
运行结果:
1.2.2 父子对象操作
1.2.2.1 API
API | 功能 | 备注 | ||||||
---|---|---|---|---|---|---|---|---|
| | | ||||||
| | | ||||||
| | | ||||||
| | | ||||||
| | |
1.2.2.2 应用场景
1.2.2.2.1 Qt对象内存管理机制
1.2.2.2.1.1 QObject继承树
- 所有对象都是直接或间接的继承QObject
- QObjects在一个对象树中组织他们自己
- 当创建一个QObject时,如果使用了其他对象作为其父对象,那么他就会被添加到父对象的children()列表中
- 当父对象被销毁时,这个QObject也会被销毁
1.2.2.2.1.2 QWidget
- 扩展了父子关系
- 当一个控件设置了父控件
- 会包含在父控件内部
- 收父控件区域裁剪
- 父控件被删除时,子控件会自动删除
1.2.2.2.2 多个顶层窗口互相独立
如果一个控件,没有任何父控件,那么就会被当成顶层控件
1.2.2.2.3 如果一个控件被包含在另外一个控件内部,就需要设置父子关系
- 显示位置收父控件约束
- 生命周期也被父对象接管
1.2.2.3 示例
from PyQt5.Qt import *
import sysclass Window(QWidget):def __init__(self):"""初始化方法"""super().__init__()self.resize(500, 500)self.setWindowTitle('对象的父子关系操作')self.initUI()def initUI(self):"""调用函数"""self.parent_children()def parent_children(self):"""QObject父子关系测试方法"""obj1 = QObject()obj2 = QObject()obj3 = QObject()print('obj1:', obj1)print('obj2:', obj2)print('obj3:', obj3)print("+++++"*5)# 设置obj1, 3父对象为obj2obj1.setParent(obj2)obj3.setParent(obj2)# 检测obj1的父对象print(obj1.parent())print("+++++"*5)# 打印obj2所有子对象print(obj2.children())print("+++++"*5)if __name__ == '__main__':app = QApplication(sys.argv)window = Window()window.show()sys.exit(app.exec_())
运行结果:
1.2.3 信号与槽 (重要)
1.2.3.1 基本概念
- Signal和Slot是Qt中的核心机制,主要作用于对象之间进行通信
- 信号: 当一个控件的状态发生改变时,向外界发出信息
- 槽: 一个执行某些操作的函数/方法
- 所有继承自QWidget的控件都支持“信号与槽”机制
1.2.3.2 机制描述
- 手动操作:信号 connect 槽
- 自动操作:当信号发出时,连接的槽函数会自动执行
1.2.3.3 基本使用
- 信号:控件内置的一些,也可以自定义
- QPushButton().presssed
- QPushButton().clicked
- 槽:不同控件内置槽函数,自定义函数和方法
- 连接方式:object.信号.connect(槽函数)
- 特性:
- 一个信号可以连接多个槽函数
- 一个信号也可以连接另外一个信号
- 信号的参数可以是python任何类型
- 一个槽可以监听多个信号
1.2.3.4 其他操作
- 自定义信号:带参数
- 信号的操作:连接、断开、发射
- 自定义槽函数lambda表达式
- 装饰器信号
1.2.4 QObject信号处理
1.2.4.1 API
API | 功能 | 备注 | ||||||
---|---|---|---|---|---|---|---|---|
| | | ||||||
| | | ||||||
| | | ||||||
| | | ||||||
| | |
1.2.4.2 应用场景
- 监听信号,影响用户行为
- 信号与槽机制(参见1.2.3)
1.2.4.3 案例
from PyQt5.Qt import *import sysclass Window(QWidget):def __init__(self):"""初始化方法"""super().__init__()self.setWindowTitle('信号与槽函数')self.resize(500, 500)self.initUI()def initUI(self):"""调用函数"""self.def_cao()def def_cao(self):"""槽函数测试方法"""self.obj = QObject()def destory_cao(obj):print('对象被释放', obj)def objectName_cao(name):print('对象名称发生改变', name)# 对象被释放self.obj.destroyed.connect(destory_cao)# 对象名称发生改变self.obj.objectNameChanged.connect(objectName_cao)# 修改对象名称self.obj.setObjectName('xxx')# 断开槽与信号的连接# self.obj.objectNameChanged.disconnect()# 临时取消槽连接self.obj.blockSignals(True)# 槽已经断开,触发后无效果self.obj.setObjectName('ooo')# 恢复槽连接self.obj.blockSignals(False)self.obj.setObjectName('xxoo')if __name__ == '__main__':app = QApplication(sys.argv)window = Window()window.show()sys.exit(app.exec_())
运行结果:
1.2.4.4 案例2
当用户点击按钮的时候, 打印"点我嘎哈?"
from PyQt5.Qt import *
import sysclass Window(QWidget):def __init__(self):"""初始化方法"""super().__init__()self.resize(500, 500)self.setWindowTitle('信号处理')self.initUI()def initUI(self):"""调用函数"""self.single_and_slot()def single_and_slot(self):"""信号与槽测试方法"""btn = QPushButton(self)btn.setText('点我!')btn.clicked.connect(self.cao)def cao(self):print('点我干啥!!!')if __name__ == '__main__':app = QApplication(sys.argv)window = Window()window.show()sys.exit(app.exec_())
运行结果:
1.2.4.5 案例3
在所有修改的窗口标题前, 添加前缀"xujie-"
要求: 创建多个用于信息提示的QLabel
- 比如, 后续我们修改标题为"Hello World!!“; 最终会自动变为"xujie-Hello World!!”
- 支持多次修改
from PyQt5.Qt import *import sysif __name__ == '__main__':app = QApplication(sys.argv)window = QWidget()# 连接窗口标题变化的信号与槽函数def cao(tittle):print('PASS!!', tittle)# 断开槽连接window.windowTitleChanged.disconnect()# 或者使用临时终止window.blockSignals(True)window.setWindowTitle('xujie-' + tittle)window.windowTitleChanged.connect(cao)# 或者使用解除临时终止window.blockSignals(False)window.windowTitleChanged.connect(cao)window.setWindowTitle('Hello world!')window.setWindowTitle('Hello world2!')window.show()sys.exit(app.exec_())
运行结果:
1.2.5 类型判定
1.2.5.1 API
API | 功能 | 备注 | ||||||
---|---|---|---|---|---|---|---|---|
| | | ||||||
| | |
1.2.5.2 应用场景
过滤筛选条件
1.2.5.3 案例1
from PyQt5.Qt import *import sysclass Window(QWidget):def __init__(self):"""初始化方法"""super().__init__()self.setWindowTitle('类型判定')self.resize(500, 500)self.initUI()def initUI(self):"""调用函数"""self.type_decide()def type_decide(self):"""类型判断测试方法"""obj = QObject()wig = QWidget()btn = QPushButton()label = QLabel()a = [obj, wig, btn, label]for aa in a:if aa.isWidgetType():print(aa, '是控件')else:print(aa, '不是控件')if aa.inherits('QWidget'):print(aa, '继承自QWidget')else:print(aa, '不是继承自QWidget')if __name__ == '__main__':app = QApplication(sys.argv)window = Window()window.show()sys.exit(app.exec_())
运行结果:
1.2.5.4 案例2
创建一个窗口,包含多个QLabel或其他控件
要求: 将包含在窗口内所有的QLabel控件,设置背景色cyan
from PyQt5.Qt import *import sysclass Window(QWidget):def __init__(self):"""初始化方法"""super().__init__()self.setWindowTitle('类型判定')self.resize(500, 500)self.initUI()def initUI(self):"""调用函数"""self.type_decide()def type_decide(self):"""类型判定方法"""label1 = QLabel(self)label1.setText('label a')label2 = QLabel(self)label2.setText('label b')label2.move(100, 0)btn = QPushButton('btn a', self)btn.move(200, 0)a = [label1, label2, btn]for widget in a:if widget.inherits('QLabel'):widget.setStyleSheet('background-color: cyan;')if __name__ == '__main__':app = QApplication(sys.argv)window = Window()window.show()sys.exit(app.exec_())
运行结果:
1.2.6 对象删除
1.2.6.1 API
API | 功能 | 备注 | ||||||
---|---|---|---|---|---|---|---|---|
| | |
1.2.6.2 应用场景
想要移除某一个对象时使用
1.2.6.3 案例
from PyQt5.Qt import *
import sysclass Window(QWidget):def __init__(self):"""初始化方法"""super().__init__()self.resize(500, 500)self.setWindowTitle('对象删除')self.initUI()def initUI(self):"""调用方法"""self.delete_object()def delete_object(self):"""对象删除方法"""obj1 = QObject()self.obj1 = obj1obj2 = QObject()obj3 = QObject()obj3.setParent(obj2)obj2.setParent(obj1)# 观察obj是否被释放obj1.destroyed.connect(lambda x:print('obj1被释放'))obj2.destroyed.connect(lambda x:print('obj2被释放'))obj3.destroyed.connect(lambda x:print('obj3被释放'))# 观察obj1是否有子控件print(obj1.children())# del方法不可使用# del obj2# deleteLater方法obj2.deleteLater()if __name__ == '__main__':app = QApplication(sys.argv)window = Window()window.show()sys.exit(app.exec_())
运行结果:
1.2.7 事件机制
1.2.7.1 相当于信号与槽机制
- 信号与槽机制是对事件机制的高级封装
- 事件机制更偏底层(远离用户)
1.2.7.2 图解
1.2.7.3 应用
- 一般情况下,我们直接通过内置的信号与槽就可以解决一般通讯问题
- 例:QPushButton的clicked信号
- 有些控件并没有提供我们想要的信号,我们就需要自己重写具体的事件函数,来捕获产生的事件,做相应的处理
- 例:Qlabel并没有clicked信号
- 某些场景并不会吧我们想要捕获的事件传递给特定函数,而是做了其他的额外处理,此时我们开头重写事件的分发函数
- 列:想捕获用户的tab点击
- 当用户点击了tab键,默认是切换焦点
- 并不会把这个事件分发给keyPressEvent函数
- 此时,需要我们重写event,来做分发处理
- 列:想捕获用户的tab点击
- 如果想要同时多多个不同的控件进行捕获tab点击,那么每个都重写event()函数,也是非常麻烦,那么可以考虑事件过滤器
- QApplication对象的事件过滤器,可以拦截所有的QObject事件,一般不怎么使用
- QApplication对象的notify()更不怎么用,会大大降低程序性能
1.2.7.4 事件的传递
- 如果一个控件没有处理该事件,则会自动传递给父控件进行处理
- 事件对象具备两个特殊的方法
- accept():自己处理了这个事件,并告诉系统不要向上层传递
- ignore():自己忽略了该事件,告诉系统,继续往后传递下去
1.2.7.5 QObject事件处理
1.2.7.5.1 API(后续介绍)
childEvent()、customEvent()、eventFilter()、installEventFilter()、removeEventFilter()、event()
1.2.7.5.2 应用场景
- 事件机制(参见1.2.7)
- 拦截事件,监听特定行为
1.2.7.6 案例
from PyQt5.Qt import *import sysclass App(QApplication):def notify(self, a0, a1):if a0.inherits("QPushButton") and a1.type() == QEvent.MouseButtonPress:print(a0, a1)return super().notify(a0, a1)class Btn(QPushButton):def event(self, e):if e.type() == QEvent.MouseButtonPress:print(e)return super().event(e)def mousePressEvent(self, *args, **kwargs):print('按钮被按下了。。。。。。')return super().mousePressEvent(*args, **kwargs)if __name__ == '__main__':app = App(sys.argv)windows = QWidget()windows.resize(500, 500)btn = Btn(windows)btn.setText('点击按钮')btn.move(200, 220)def cao():print('不要点我!!')btn.pressed.connect(cao)windows.show()sys.exit(app.exec_())
运行结果:
1.2.8 定时器
1.2.8.1 API
API | 功能 | 备注 | ||||||
---|---|---|---|---|---|---|---|---|
| | Qt.TimerType:①Qt.PreciseTimer:精确定时器,尽可能保持毫秒准确;②Qt.CoarseTimer:粗定时器,5%的误差间隔;③Qt.VeryCoarseTimer:很粗定时器,只能到秒级; timer_id:定时器唯一标识 | ||||||
| | | ||||||
| | |
1.2.8.2 应用场景
- 轮询
- 倒计时
1.2.8.3 案例1
创建一个窗口,并设计一个子控件label
要求:
- 展示10秒倒计时
- 倒计时结束,就停止计时
from PyQt5.Qt import *
import sysclass Mylabel(QLabel):def __init__(self, *args, **kwargs):"""初始化方法"""super().__init__(*args, **kwargs)self.setText('10')self.move(200, 220)self.setStyleSheet('font-size: 22px;')self.timer_id = self.startTimer(1000)def setSec(self, sec):"""设置倒计时时间方法"""self.setText(str(sec))def startMyTimer(self, ms):"""设置时间间隔方法"""self.timer_id = self.startTimer(ms)def timerEvent(self, a0):"""重写定时器事件"""# 获取当前标签内容current_sec = int(self.text())current_sec -= 1self.setText(str(current_sec))if current_sec == 0:self.killTimer(self.timer_id)if __name__ == '__main__':app = QApplication(sys.argv)window = QWidget()window.setWindowTitle('定时器')window.resize(500, 500)label = Mylabel(window)label.setSec(50)label.startMyTimer(1000)window.show()sys.exit(app.exec_())
1.2.8.3 案例2
创建一个窗口,通过定时器不断增加该窗口的尺寸大小
要求:
- 每100ms宽高均增加1px
from PyQt5.Qt import *
import sysclass MyWidget(QWidget):def timerEvent(self, *args, **kwargs):current_w = self.width()current_h = self.height()self.resize(current_w + 10, current_h + 10)if __name__ == '__main__':app = QApplication(sys.argv)window = MyWidget()window.resize(200, 200)window.setWindowTitle('定时器')window.startTimer(1000)window.show()sys.exit(app.exec_())
1.2.9 语言翻译
1.2.9.1 API
- tr()
1.2.9.2 应用场景
- 多语言国际化支持
相关文章:
【GUI-pyqt5】QObject类
1. QObject模块详解 1.1 描述 所有Qt对象的父类 1.2 功能和作用 1.2.1 对象名称和属性 1.2.1.1 API API功能备注 setObjectName("唯一名称") 给一个Qt对象设置一个名称 一般这个名称是唯一的,当做对象ID来使用 objectName() 获取一个对象名称 - set…...
第2章:SQL基础
第2章:SQL基础 2.1 SQL语言介绍 2.1.1 SQL发展历史 SQL的起源SQL标准的演变不同数据库的SQL实现 2.1.2 SQL语言分类 数据定义语言 (DDL):用于定义和修改数据库的结构,包括数据库、表、索引、视图等对象的创建、修改和删除。数据操作语言 (DML):用于…...
Azkaban其一,介绍、体系架构和安装
目录 一、简介 二、Azkaban的体系结构 三、Azkaban的安装步骤 1、上传,解压 2、生成mysql的元数据 3、配置web-server 4、配置exec-server 5、修改所有的.sh 的执行权限 一、简介 遇到了什么问题才会使用Azkaban ?比如: 想启动hadoop集群先启动…...
Seata 使用教程:全面解锁分布式事务管理
Seata 使用教程:全面解锁分布式事务管理 在当今分布式系统蓬勃发展的时代,微服务架构被广泛应用,随之而来的是分布式事务管理的难题。Seata 作为一款开源的分布式事务解决方案,为保障分布式系统的数据一致性提供了强有力的支持。本文将详细讲解 Seata 的使用方法,深入剖析…...
《learn_the_architecture_-_aarch64_exception_model》学习笔记
1.当发生异常时,异常级别可以增加或保持不变,永远无法通过异常来转移到较低的权限级别。从异常返回时,异常级别可能会降低或保持不变,永远无法通过从异常返回来移动到更高的权限级别。EL0级不进行异常处理,异常必须在比…...
密码学原理技术-第十一章-Hash Functions
文章目录 总结Why we need hash functionsDigital Signature with a Hash FunctionBasic Protocol for Digital Signatures with a Hash FunctionPrincipal input–output behavior of hash functions Security propertiesThe three security requirements of hash functionsWh…...
Golang 入门基础知识
快速入门 go 语言笔记,参考了各种大佬的 blog 。 一、下载安装 国内站点 :https://golang.google.cn IDE : Goland (2020.12月以后破解有些困难 见 zhile.io, 无法试用的话可以搜一个注册码,失效的也可以&…...
SQL把字符串按逗号分割成记录
在 SQL 中,可以通过以下方法将字符串按逗号分割,并将每个分割的值作为单独的记录插入到结果集中。以下是针对不同数据库系统的实现方法: 1. 使用 STRING_SPLIT(SQL Server 2016) STRING_SPLIT 是 SQL Server 提供的内置…...
HTML——26.像素单位
<!DOCTYPE html> <html><head><meta charset"UTF-8"><title>像素</title></head><body><!--像素:1.指设备屏幕上的一个点,单位px,如led屏上的小灯朱2.当屏幕分辨率固定时&…...
TIM的输出比较(PWM)
OC(Output Compare)输出比较 输出比较可以通过比较CNT与CCR寄存器值的关系,来对输出电平进行置1、置0或翻转的操作,用于输出一定频率和占空比的PWM波形 每个高级定时器和通用定时器都拥有4个输出比较通道 初始化 1.开启RCC RCC_…...
李宏毅机器学习笔记-Transformer
目录 1. Seq2seq 2. encoder Transformer 中的 Block 结构 3. Decoder 4.Encoder和Decoder间的信息传递 5.Training 6.Tips 1. Seq2seq Transformer 是一个seq2seq的model。Seq2seq指的是input是一个序列,输出也是一个序列,输出的长度是由机器自己…...
【机器学习:三、常见的代价函数】
代价函数的选择与任务类型(回归、分类等)以及模型的具体目标密切相关。 回归任务中的代价函数 均方误差(Mean Squared Error, MSE) 公式: J ( θ ) 1 m ∑ i 1 m ( y i − y ^ i ) 2 J(\theta)\frac{1}{m}\sum_{i1}^m(y_i-\…...
React 数据是怎样传递的
写在前面 在 React 应用程序中,数据传递是非常重要的。它允许我们在组件之间共享信息和状态,从而构建出复杂的用户界面。本文将深入探讨 React 中的数据传递机制,包括 props、state 和 context API。我们还将通过实际例子来演示如何在项目中…...
Python入门教程 —— 高阶函数和装饰器
1.递归函数 什么是递归函数 如果一个函数在内部不调用其它的函数,而是自己本身的话,这个函数就是递归函数。 递归函数的作用 举个例子,我们来计算阶乘 n! = 1 * 2 * 3 * ... * n 解决办法1:使用循环来完成 def cal(num):result,i = 1,1while i <= num:result *= ii…...
RSA密码的安全性分析(简化版本)
RSA的安全性是基于分解大整数的困难性假定,之所以认为是假定是因为至今还未能证明大整数就是NP问题,也许有尚未发现的多项式时间分解算法。随着人类计算能力的不断提高,原来被认为是不可能分解的大数已经被成功分解。对于大整数的威胁除了人类…...
解决Vue中设置el-select的高度不生效问题
el-select是Element UI框架中的一个选择器组件,它允许用户从多个选项中选择一个或多个项目。但这里确存在一个小坑,我们可以看到直接修改el-select的高度是无法生效的 <template><div id"login"><el-select v-model"role…...
解决openpyxl操纵带公式的excel或者csv之后,pandas无法读取数值的问题
1 功能特点 openpyxl: 这是一个专门用于操作Excel文件(.xlsx/.xlsm)的库。它提供了丰富的功能来读取、写入和修改Excel文件的各个元素,如单元格、行、列、工作表等。例如,可以通过openpyxl轻松地创建一个新的Excel工作…...
高等数学学习笔记 ☞ 无穷小比较与等价无穷小替换
1. 无穷小比较 1. 本质:就是函数的极限趋于0时的速度,谁快谁慢的问题。 2. 定义:若是在同一自变量的变化过程中的无穷小,且,则: ①:若,则称是比的高阶无穷小,记作&…...
计算队列中的‘捣乱分子’对数:一种量化无序程度的方法
计算队列中的‘捣乱分子’对数:一种量化无序程度的方法 前言解题思路关键点实现代码时间复杂度分析前言 在日常生活中,我们经常会遇到需要排队的场景,比如买票、候车、就餐等。在理想的排队情况下,人们会按照某种顺序(如先到先服务)整齐地排成一列。然而,总有一些人不遵…...
如何在不丢失数据的情况下从 IOS 14 回滚到 IOS 13
您是否后悔在 iPhone、iPad 或 iPod touch 上安装 iOS 14?如果你这样做,你并不孤单。许多升级到 iOS 14 beta 的 iPhone、iPad 和 iPod touch 用户不再适应它。 如果您在正式发布日期之前升级到 iOS 14 以享受其功能,但您不再适应 iOS 14&am…...
提升汽车金融租赁系统的效率与风险管理策略探讨
内容概要 在汽车金融租赁系统这个复杂的生态中,提升整体效率是每个企业都渴望达成的目标。首先,优化业务流程是实现高效运行的基础。通过分析目前的流程,找出冗余环节并进行简化,能够帮助企业缩短审批时间,提高客户满…...
Git 入门(一)
git 工作流如下: 命令如下: clone(克隆): 从远程仓库中克隆代码到本地仓库checkout (检出):从本地仓库中检出一个仓库分支然后进行修订add(添加): 在提交前先将代码提交到暂存区com…...
pyinstaller冻结打包多进程程序的bug:无限创建进程直至系统崩溃
前面写过两篇相关的文章: PyQt应用程序打包Python自动按键 这两篇文章都没有提到下面的这个重要问题: 采用Pyinstaller冻结打包多进程程序时,必须非常小心。这个技术线在Windows上会有一个非常严重的Bug。直接运行打包后的程序会造成无限创…...
OSI模型的网络层中产生拥塞的主要原因?
( 1 )缓冲区容量有限;( 1.5 分) ( 2 )传输线路的带宽有限;( 1.5 分) ( 3 )网络结点的处理能力有限;( 1 分…...
服务器开发 的设计模式(Design Patterns)核心知识
服务器开发的设计模式(Design Patterns)核心知识 在现代软件开发中,设计模式是一组为解决特定问题而重用的解决方案。它们是经过时间考验的最佳实践,为开发人员提供了一种有效的解决方案来应对常见的软件设计问题。特别是在服务器…...
智能工厂的设计软件 应用场景的一个例子: 为AI聊天工具添加一个知识系统 之20 再次重建 之5 项目文件三大部 整“拼”项目文档总述
本文要点 ]本项目的项目文件中的三个Part终于“拼”出来的(个别用词可能还需斟酌,但样子、格式和意思 差不多): Part1【凡间-AI众生】 人性化&去中心化-个体人生观 语言有关(语言交流-经验常识实践 信条 行为主义 随机数-本质偶然的 想…...
Lucas-Kanade光流法详解
简介:个人学习分享,如有错误,欢迎批评指正。 光流(Optical Flow)描述的是图像序列中各像素点随时间的运动情况,是计算机视觉中的基本问题之一。光流问题涉及尝试找出一幅图像中的许多点在第二幅图像中移动的…...
基于YOLO5的机械臂视觉抓取实现
前言: 机器人视觉系统标定是保证机器人精确运动和控制的关键环节之一。通过对机器人的运动学进行分析,可以精确计算出机器人末端执行器的位姿信息,从而实现对目标的精准定位和控制。相机标定是计算机视觉和图像处理中的重要步骤,标…...
Git 仓库与文件管理笔记
Git 的三种仓库概念 本地仓库 (Local Repository) 位于本地 .git 文件夹中通过 git init 或 git clone 创建存储完整的项目历史和分支信息 远程仓库 (Remote Repository) 位于 GitHub、GitLab 等平台服务器使用 git remote -v 查看所有远程仓库默认远程仓库名通常为 origin 工…...
Qt 5.14.2 学习记录 —— 오 信号与槽机制(2)
文章目录 1、信号与槽的参数2、为什么要有信号槽机制?3、断开并重新连接4、槽函数lambda写法 1、信号与槽的参数 信号和槽可以带参数,当信号带有参数时,槽的参数必须和信号的一致,此时发送信号就可以给信号函数传递实参ÿ…...
043_小驰私房菜_MTK Camera,Hal层将camera型号写到property属性中
【问题背景】 app层需要知道当前设备的摄像头型号,然后做一些差异化处理。底下如何上报这个摄像头型号? 【分析】 在kernel和hal层,都是有地方能获取到当前摄像头的型号,就看在哪里添加方便。获取到摄像头硬件型号后,将其写入到property属性, 然后app就可以通过读取该…...
Java线程
目录 一、线程入门 二、线程同步 三、死锁 四、线程的方法 五、线程的流程图 六、线程池 一、线程入门 1.进程:每一个软件都是一个进程。 2.线程:进程是由多个线程组成的。 3.进程和线程的关系:一个进程是对应一个或者是多个线程的。…...
JMeter 的 If Controller:开启性能测试的智能大门
嘿,宝子们!今天咱们就来聊聊 JMeter 里超级厉害的 If Controller,它就像是一把神奇的钥匙,能帮我们打开灵活测试的大门,让你的测试计划变得更加智能和高效。 一、If Controller 初印象 想象一下,你正在指…...
node内置模块之---os 模块
os 模块的作用 os 模块是 Node.js 的一个核心模块,提供了与操作系统交互的一些功能。它使得 Node.js 应用可以访问操作系统的底层信息,并执行一些系统级的操作,比如文件系统操作、环境变量、进程管理等。 os 模块的相关api 文件系统路径操…...
PgSQL如何用cmd命令行备份和还原数据库
一、备份 备份为压缩的二进制格式(通常更快且占用空间更少) pg_dump -U username -Fc -h hostname -p port -d dbname -F p -f backup.sql-U username:指定连接数据库的用户名(默认是 postgres)。-Fc:备…...
neo4j学习笔记
图数据库 图数据库是基于图论实现的一种NoSQL数据库,其数据存储结构和数据查询方式都是图论为基础的,图数据库主要用于存储更多的连接数据。 图论(GraphTheory)是数学的一个分支。图论以图为研究对象,图论的图是由若干…...
Halcon 显示异常
//For Halcon System HOperatorSet.SetSystem("clip_region", "false"); set_system( clip_region, false) *旋转 hom_mat2d_identity (HomMat2DIdentity1) hom_mat2d_rotate (HomMat2DIdentity1, rad( 90), 0, 0, HomMat2DRotate) affine_trans_region …...
2021年3月多省联考《申论》B卷真题解析
2021年福建公务员考试申论试题(乡镇卷) 材料一 在传统乡镇布局中,部分乡镇面积小、人口少,但管理机构、干部职数、机构编制、财政投入均不少,行政运行成本较高。合理调整乡镇行政区划,有助于统筹设置乡镇服…...
Mac iTerm2集成DeepSeek AI
1. 去deepseek官网申请api key,DeepSeek 2. 安装iTerm2 AI Plugin插件,https://iterm2.com/ai-plugin.html,插件解压后直接放到和iTerms相同的位置,默认就在/Applications 下 3. 配置iTerm2 4. 重启iTerm2,使用快捷键呼出AI对话…...
主机A与主机B建立TCP连接的三次握手过程
( 1 )主机 A 的 TCP 向主机 B 发出连接请求 SYN 报文段(第一次握手)。( 1 分) ( 2 )一旦包含 SYN 报文段的 IP 数据报到达主机 B , SYN 报文段被从数据报…...
vue3 vite 动态加载路由遇到的问题
记录一下动态加载路由遇到的问题 正常使用import引入静态路由是没问题的 component: () > import(/components/ExampleComponent.vue)动态引入的时候写成import就不行了 由于后端给的路由格式比较反人类…我这边先递归把获取到的数据格式做了一个整合. const processedDa…...
仿生的群体智能算法总结之一(十种)
群体智能算法是一类通过模拟自然界中的群体行为来解决复杂优化问题的方法。以下是10种常见的群体智能算法: 编号 算法名称(英文) 算法名称(中文) 年份 作者 1 Ant Colony Optimization (ACO) 蚁群优化算法 1991 Marco Dorigo 2 Particle Swarm Optimization (PSO) 粒子群优…...
02pandas读取和保存数据的方法
pandas读取和保存数据的方法 一、pandas支持的数据格式二、pandas常用数据读取方法1. 准备工作2. 代码示例1.pandas数据读取常用的方法2. read_excel 方法(1)read_excel()方法:读取excel文件(2)head()方法:…...
【STM32项目】智能物联网驱动的生物样本培育与管理辅助系统(完整工程资料源码)
视频功能演示: 智能物联网驱动的生物样本培育与管理辅助系统 目录: 目录 视频功能演示: 目录:...
家教老师预约平台小程序系统开发方案
家教老师预约平台小程序系统将连接学生/家长与家教老师,提供一站式的家教服务预约体验。 一、用户需求分析1、家教老师:希望获得更多的学生资源,通过平台展示自己的教学特长和经验,管理个人日程,接收并确认预约请求&a…...
uniapp 自定义类微信支付键盘 (微信小程序)
效果图 代码: <view class"popups popupsB"><view class"appreciatePrice"><view class"appreciatePriceTitle">赞赏金额</view><view class"appreciatePriceInput flex ac">¥<input typ…...
推荐5款局域网IP扫描工具,支持电脑+Android!
在日常网络管理中,快速扫描局域网中的设备和IP地址是一项基本但非常重要的任务。无论是排查网络问题还是进行设备管理,一款好用的 IP 扫描工具都能让你事半功倍。 如何选择适合自己需求的局域网 IP 扫描工具?有哪些功能强大又易于上手的工具…...
第十一章 图论
/* * 题目名称:连通图 * 题目来源:吉林大学复试上机题 * 题目链接:http://t.cn/AiO77VoA * 代码作者:杨泽邦(炉灰) */#include <iostream> #include <cstdio>using namespace std;const int MAXN 1000 10;int fathe…...
算法学习(21)—— BFS解决FloodFill问题
关于FloodFill 关于FloodFill算法,我们之前在dfs章节已经介绍过了:算法学习(17)—— FloodFill算法-CSDN博客 下面是用bfs宽搜来解决的实例 部分OJ题详解 733. 图像渲染 733. 图像渲染 - 力扣(LeetCode…...
计算机网络基础(7)中科大郑铨老师笔记
应用层 目标: 网络应用的 原理:网络应用协议的概念和实现方面 传输层的服务模型 客户-服务器模式 对等模式(peerto-peer) 内容分发网络 网络应用的 实例:互联网流行的应用层协 议 HTTP FTP SMTP / POP3 / IMAP DNS…...