pyqt5界面与逻辑分离--信号槽的装饰器实现方式
本文展示了 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界面与逻辑分离--信号槽的装饰器实现方式的更多相关文章
- 解析大型.NET ERP系统 界面与逻辑分离
Windows Forms程序实现界面与逻辑分离的关键是数据绑定技术(Data Binding),这与微软推出的ASP.NET MVC的原理相同,分离业务代码与界面层,提高系统的可维护性. 数据绑定 ...
- tkinter的GUI设计:界面与逻辑分离(四)-- 与 matplotlib 结合
有些场合,我们需要对数据可视化.单是靠 tkinter 难度太大,而且做出来的效果不一定理想. 此时,将 tkinter 与 matplotlib 结合,是最好的选择. 知识点: 将 tkinter ...
- tkinter的GUI设计:界面与逻辑分离(三)-- 多页面
知识点: 使用 tkinter.Frame.tkraise() 函数去提升当前 tkinter.Frame 的 z 轴顺序,使得多个 tkinter.Frame 的可见性得以切换 本文基于:win7 ...
- tkinter的GUI设计:界面与逻辑分离(二)-- 菜单栏
由于要用到文件对话框和消息对话框,所以先给出下面的列表. py2 与 py3 中 tkinter 的变化: Tkinter → tkinter tkMessageBox → tkinter.messa ...
- tkinter的GUI设计:界面与逻辑分离(一)-- 初次见面
PyQt实现界面与逻辑分离的设计很是方便,详情可以见我的第一篇博文. 不过本文将使用python的标准库 tkinter,来实现界面与逻辑分离的GUI 设计. 我们来设计一个很简单的程序: 目的:长度 ...
- 想在子线程里面触发的信号的槽函数在子线程执行,信号槽连接必须使用DirectConnection 方式(即使跨线程,也可以强迫DirectConnection,而不能是AutoConnection)
Qt多线程的实现 1.继承QThread,重新run 2.继承Object,调用moveToThread方法 两种方法各有利弊:主要参考:http://blog.51cto.com/9291927/1 ...
- 基于linux信号的timeout装饰器
在做基于ray的分布式任务处理时,偶尔遇到由于ray集群不稳定导致的长时间连接不上,进而导致程序卡死,无法向后端返回任务状态的情况.但是ray的初始化函数本身未实现超时机制,因此设计基于多线程+信号的 ...
- PyQt5系列教程(六)如何让界面和逻辑分离
软硬件环境 OS X EI Capitan Python 3.5.1 PyQt 5.5.1 PyCharm 5.0.3 前言 前面的内容我们介绍了利用QtDesigner来设计界面,再通过命令行工具p ...
- _ZNote_编程语言_Qt_信号槽实现_拖拽方式使用控件
所谓的信号槽,实际上就是观察者模式. 当某个事件发生后,比如,按钮检测到自己被点击了一下,它就会发出一个信号(signal). 这种发出信号是没有目的的,类似于广播.如果对象对这个信号感兴趣,它就会使 ...
随机推荐
- IOS 网络浅析 (二 网络异步请求)
学习网络,无论是C/S还是B/S首要的当然是向服务器发送请求,并得到响应,么有请求没有响应,那就不叫做网络了. 这边文章向大家介绍境界一下网路异步请求. *大家不要觉得我写的知识点太零散,我只是想给大 ...
- iOS 准确计算某个时间点距现在的时间差的代码 如"几分钟,几小时,几秒之前" ,
利用时间戳来进行计算 ,需要给它一个时间: NSString *countTime = [self intervalSinceNow:@"2015-10-29 17:00:00" ...
- Silverlight项目笔记6:Linq求差集、交集&检查网络连接状态&重载构造函数复用窗口
1.使用Linq求差集.交集 使用场景: 需要从数据中心获得用户数据,并以此为标准,同步系统的用户信息,对系统中多余的用户进行删除操作,缺失的用户进行添加操作,对信息更新了的用户进行编辑操作更新. 所 ...
- Linux与Windows共享文件夹之samba的安装与使用(Ubuntu为例)
1.写在前面 当你在Windows上安装了一台Linux的虚拟机,你想访问Linux中的文件夹,将虚拟机中的文件复制到Windows主机上,你会怎么做呢?如果这台Linux主机不是虚拟机,而是 ...
- delete_old_backup.bat
在前面forfiles命令批量删除N天前文件 这篇文章里面讲述了如何在SQL Server 2000中使用forfile删除N天前备份文件,但是现在又有新需求: 需求描述:通过数据库维护计划将备份生成 ...
- 迷宫问题求解之“A*搜索”(二)
摘要:在迷宫问题求解之"穷举+回溯"(一)这篇文章中采用"穷举+回溯"的思想,虽然能从迷宫的入口到出口找出一条简单路径,但是找出来的不是最优路径.因此本文采用A ...
- Ubuntu文本编辑时vi和nano命令的区别(建议使用nano)
vi是Unix世界里极为普遍的全荧幕文书编辑器,几乎可以说任何一台Unix机器都会提供这套软体就像windows的记事本一样. 键入 vi /etc/hosts 进入vi界面,把光标移动到文件未尾.按 ...
- maven 仓库搜索添加需要的jar包
可用仓库网址: http://search.maven.org/#browse http://mvnrepository.com/ http://repository.sonatype.org/ind ...
- hdu Flow Problem (最大流 裸题)
最大流裸题,贴下模版 view code#include <iostream> #include <cstdio> #include <cstring> #incl ...
- nopcommerce之权限模块
这篇文章简单介绍一下nopcommerce的权限模块,nopcommerce里面的权限设计相对比较简单,主要针对后台的action和前台的是否显示(比如产品.品牌等),虽然简单但是应付一般的项目应该没 ...