本文展示了 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_())

pyqt5界面与逻辑分离--信号槽的装饰器实现方式的更多相关文章

  1. 解析大型.NET ERP系统 界面与逻辑分离

    Windows Forms程序实现界面与逻辑分离的关键是数据绑定技术(Data Binding),这与微软推出的ASP.NET MVC的原理相同,分离业务代码与界面层,提高系统的可维护性. 数据绑定 ...

  2. tkinter的GUI设计:界面与逻辑分离(四)-- 与 matplotlib 结合

    有些场合,我们需要对数据可视化.单是靠 tkinter 难度太大,而且做出来的效果不一定理想. 此时,将 tkinter 与 matplotlib 结合,是最好的选择. 知识点: 将 tkinter ...

  3. tkinter的GUI设计:界面与逻辑分离(三)-- 多页面

    知识点: 使用 tkinter.Frame.tkraise() 函数去提升当前 tkinter.Frame 的 z 轴顺序,使得多个 tkinter.Frame 的可见性得以切换 本文基于:win7 ...

  4. tkinter的GUI设计:界面与逻辑分离(二)-- 菜单栏

    由于要用到文件对话框和消息对话框,所以先给出下面的列表. py2 与 py3 中 tkinter 的变化: Tkinter → tkinter tkMessageBox → tkinter.messa ...

  5. tkinter的GUI设计:界面与逻辑分离(一)-- 初次见面

    PyQt实现界面与逻辑分离的设计很是方便,详情可以见我的第一篇博文. 不过本文将使用python的标准库 tkinter,来实现界面与逻辑分离的GUI 设计. 我们来设计一个很简单的程序: 目的:长度 ...

  6. 想在子线程里面触发的信号的槽函数在子线程执行,信号槽连接必须使用DirectConnection 方式(即使跨线程,也可以强迫DirectConnection,而不能是AutoConnection)

    Qt多线程的实现 1.继承QThread,重新run 2.继承Object,调用moveToThread方法 两种方法各有利弊:主要参考:http://blog.51cto.com/9291927/1 ...

  7. 基于linux信号的timeout装饰器

    在做基于ray的分布式任务处理时,偶尔遇到由于ray集群不稳定导致的长时间连接不上,进而导致程序卡死,无法向后端返回任务状态的情况.但是ray的初始化函数本身未实现超时机制,因此设计基于多线程+信号的 ...

  8. PyQt5系列教程(六)如何让界面和逻辑分离

    软硬件环境 OS X EI Capitan Python 3.5.1 PyQt 5.5.1 PyCharm 5.0.3 前言 前面的内容我们介绍了利用QtDesigner来设计界面,再通过命令行工具p ...

  9. _ZNote_编程语言_Qt_信号槽实现_拖拽方式使用控件

    所谓的信号槽,实际上就是观察者模式. 当某个事件发生后,比如,按钮检测到自己被点击了一下,它就会发出一个信号(signal). 这种发出信号是没有目的的,类似于广播.如果对象对这个信号感兴趣,它就会使 ...

随机推荐

  1. iOS开发~UI布局(二)storyboard中autolayout和size class的使用详解

    一.概要:前一篇初步的描述了size class的概念,那么实际中如何使用呢,下面两个问题是我们一定会遇到的: 1.Xcode6中增加了size class,在storyboard中如何使用? 2.a ...

  2. JSP入门&会话技术

    一.JSP    1.jsp技术        jsp是sun提供动态web资源开发技术.为了解决在Servlet中拼写html内容css.js内容十分不方便的问题,sun提供了这样一门技术.如果说S ...

  3. Informatica Powercenter学习笔记

    LOOKUP TRANSFORMATION的使用点评: LOOKUP基本用法不熟的话请参考下附属信息. 用法感受: 1 LOOKUP的作用跟我们以前在EXCEL的函数功能类似,就是隔表取值.优点就是用 ...

  4. delete_old_backup.bat

    在前面forfiles命令批量删除N天前文件 这篇文章里面讲述了如何在SQL Server 2000中使用forfile删除N天前备份文件,但是现在又有新需求: 需求描述:通过数据库维护计划将备份生成 ...

  5. Force.com平台基础

    当我开始写这篇博客的时候,<Force.com Platform Fundamentals>的PDF版本我还没看到十分之一.由于PDF全部是英文的,所以我看起来比较吃力.我尝试过边看边做笔 ...

  6. 教你怎样写自定义IP地址算法

    通过IP地址可以看到算法规律,写成自定义IP地址,也可以把IP地址转为自定格式的IP地址.也可以用于加密一些明文数字.起始次方可自定义(以1次方和0次方为例) a.以下写正反算法(以1次方为最小单位) ...

  7. MemSQL分布式架构介绍(二)

    接上次的MemSQL分布式架构介绍(一),原文在这里:http://docs.memsql.com/latest/concepts/distributed_architecture/ 首先上张图,是我 ...

  8. Less里css表达式的写法

    项目中用的grunt-contrib-less, 写了以下less代码 .mapfix{ position: fixed; top:10px; width: 430px; z-index: 100; ...

  9. Android Studio调试功能使用总结【转】

    Android Studio调试功能使用总结[转]   这段时间一直在使用Intellij IDEA, 今天把调试区工具的使用方法记录于此. 先编译好要调试的程序. 1.设置断点 选定要设置断点的代码 ...

  10. Hive2 jdbc test

    package andes; import java.io.BufferedWriter; import java.io.FileOutputStream; import java.io.IOExce ...