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_())

 

目录
相关文章
|
1月前
Flutter 自定义组件继承与调用的高级使用方式
本文深入探讨了 Flutter 中自定义组件的高级使用方式,包括创建基本自定义组件、继承现有组件、使用 Mixins 和组合模式等。通过这些方法,您可以构建灵活、可重用且易于维护的 UI 组件,从而提升开发效率和代码质量。
131 1
|
6月前
|
存储 图形学
【unity小技巧】unity事件系统创建通用的对象交互的功能
【unity小技巧】unity事件系统创建通用的对象交互的功能
67 0
|
7月前
|
设计模式
【第二章】自定义信号和槽函数
【第二章】自定义信号和槽函数
|
7月前
|
JavaScript 前端开发 安全
【QML 与 C++ 之间的通讯机制】QML 与 Qt 通讯:讲解如何在QML 中使用C++类,以及如何在C++ 中获取QML的内容
【QML 与 C++ 之间的通讯机制】QML 与 Qt 通讯:讲解如何在QML 中使用C++类,以及如何在C++ 中获取QML的内容
797 1
|
7月前
|
前端开发 程序员 开发者
自己封装的一些工具函数
自己封装的一些工具函数
|
7月前
|
算法 关系型数据库 编译器
[项目配置] 配置Qt函数库和ui界面库的封装并调用的项目(一)
[项目配置] 配置Qt函数库和ui界面库的封装并调用的项目
210 0
|
7月前
|
C++
[项目配置] 配置Qt函数库和ui界面库的封装并调用的项目(二)
[项目配置] 配置Qt函数库和ui界面库的封装并调用的项目
115 0
|
程序员 Python
Python Qt GUI设计:窗口之间数据传递(拓展篇—5)
在开发程序时,如果这个程序只有一个窗口,则应该关心这个窗口里面的各个控件之间是如何传递数据的。如果这个程序有多个窗口,那么还应该关心不同的窗口之间是如何传递数据的。 本篇博文首先给出一个例子,说明在一个窗口中不同控件之间的数据是如何传递的。对于多窗口的情况,一般有两种解决方法:一种是主窗口获取子窗口中控件的属性,另一种是通过信号与槽机制,一般是子窗口通过发射信号的形式传递数据,主窗口的槽函数获取这些数据。
|
XML Java Maven
一个封装好的dialog工具类,减少重复的代码,简洁又方便使用!
一个封装好的dialog工具类,减少重复的代码,简洁又方便使用!
一个封装好的dialog工具类,减少重复的代码,简洁又方便使用!