pyqt5界面与逻辑分离--信号槽的装饰器实现方式

简介: 本文展示了 pyqt5 信号槽的装饰器实现方式(借鉴自 eirc6)   一个简单的例子。实现功能:两个数相加,显示结果。如图   两个文件,第一个是界面文件 ui_calc.py # ui_calc.

 本文展示了 pyqt5 信号槽的装饰器实现方式(借鉴自 eirc6)

 

一个简单的例子。实现功能:两个数相加,显示结果。如图

 

两个文件,第一个是界面文件 ui_calc.py

# ui_calc.py

from PyQt5 import QtCore, QtGui, QtWidgets

class Ui_Calc(object):
    
    def setupUi(self, Form):
        self.inputSpinBox1 = QtWidgets.QSpinBox(Form)
        self.inputSpinBox1.setGeometry(QtCore.QRect(1, 26, 46, 25))
        self.inputSpinBox1.setObjectName("inputSpinBox1") # 必须
        
        self.inputSpinBox2 = QtWidgets.QSpinBox(Form)
        self.inputSpinBox2.setGeometry(QtCore.QRect(70, 26, 46, 25))
        self.inputSpinBox2.setObjectName("inputSpinBox2") # 必须
        
        self.outputWidget = QtWidgets.QLabel(Form)
        self.outputWidget.setGeometry(QtCore.QRect(140, 24, 36, 27))
        self.outputWidget.setObjectName("outputWidget") # 必须
        
        QtCore.QMetaObject.connectSlotsByName(Form) # 必须

说明:1. 界面部件需要setObjectname ;  2. 最后必须 QtCore.QMetaObject.connectSlotsByName(Form)

 

 

第二个是逻辑文件 calc.py

# calc.py

from
PyQt5.QtCore import pyqtSlot from PyQt5.QtWidgets import QApplication, QWidget from ui_calc import Ui_Calc
# 方式一 class MyCalc(QWidget): def __init__(self, parent=None): super().__init__(parent) self.ui = Ui_Calc() self.ui.setupUi(self) @pyqtSlot(int) def on_inputSpinBox1_valueChanged(self, value): self.ui.outputWidget.setText(str(value + self.ui.inputSpinBox2.value())) @pyqtSlot(int) def on_inputSpinBox2_valueChanged(self, value): self.ui.outputWidget.setText(str(value + self.ui.inputSpinBox1.value()))

# 方式二 class MyCalc2(QWidget, Ui_Calc): def __init__(self, parent=None): super().__init__(parent) self.setupUi(self) @pyqtSlot(int) def on_inputSpinBox1_valueChanged(self, value): self.outputWidget.setText(str(value + self.inputSpinBox2.value())) @pyqtSlot(int) def on_inputSpinBox2_valueChanged(self, value): self.outputWidget.setText(str(value + self.inputSpinBox1.value()))

if __name__ == '__main__': import sys app = QApplication(sys.argv) win = MyCalc()
  # win = MyCalc2() win.show() sys.exit(app.exec_())

 

目录
相关文章
|
5月前
|
数据安全/隐私保护 Python
Python装饰器是高阶函数,用于在不修改代码的情况下扩展或修改函数行为。它们提供可重用性、模块化和无侵入性的功能增强。
【6月更文挑战第20天】Python装饰器是高阶函数,用于在不修改代码的情况下扩展或修改函数行为。它们提供可重用性、模块化和无侵入性的功能增强。例如,`@simple_decorator` 包装`my_function`,在调用前后添加额外操作。装饰器还能接受参数,如`@logged("INFO", "msg")`,允许动态定制功能。
42 6
|
6月前
|
设计模式
【第二章】自定义信号和槽函数
【第二章】自定义信号和槽函数
|
6月前
|
前端开发 程序员 开发者
自己封装的一些工具函数
自己封装的一些工具函数
|
6月前
|
算法 关系型数据库 编译器
[项目配置] 配置Qt函数库和ui界面库的封装并调用的项目(一)
[项目配置] 配置Qt函数库和ui界面库的封装并调用的项目
188 0
|
6月前
|
C++
[项目配置] 配置Qt函数库和ui界面库的封装并调用的项目(二)
[项目配置] 配置Qt函数库和ui界面库的封装并调用的项目
102 0
|
11月前
|
存储 小程序 前端开发
小程序之后台数据动态交互及WXS的使用 (5)
小程序之后台数据动态交互及WXS的使用 (5)
|
JavaScript 小程序
UniApp 小程序封装原生组件(使用与交互详细流程)
UniApp 小程序封装原生组件(使用与交互详细流程)
419 0
|
JavaScript
封装代码编辑组件
封装代码编辑组件
封装代码编辑组件
|
JavaScript 前端开发
封装一个视频组件(可模拟画中画效果)
封装一个视频组件(可模拟画中画效果)
封装一个视频组件(可模拟画中画效果)
|
小程序 前端开发 JavaScript
【小程序开发】—— 封装自定义弹窗组件
【小程序开发】—— 封装自定义弹窗组件
193 0
【小程序开发】—— 封装自定义弹窗组件
下一篇
无影云桌面