python + pyqt5 UI和信号槽分离方法

初级菜鸟,知识点记录。

每次重新生成UI.py文件的时候,里面的按钮方法都会被清除,想一个方法可以把按钮响应方法放到外面,利于维护。

 

新建一个按钮文件并继承UI代码,把信号槽及按钮响应方法写在按钮文件里面,这样每次重新生成UI文件时,只需要注释掉信号槽部分,就可以了。

UI 生成py文件,注释掉信号槽部分代码

mainUI.py

 1 # -*- coding: utf-8 -*-
 2 
 3 # Form implementation generated from reading ui file 'mainUI.ui'
 4 #
 5 # Created by: PyQt5 UI code generator 5.11.3
 6 #
 7 # WARNING! All changes made in this file will be lost!
 8 
 9 from PyQt5 import QtCore, QtGui, QtWidgets
10 
11 class Ui_MainWindow(object):
12     def setupUi(self, MainWindow):
13         MainWindow.setObjectName("MainWindow")
14         MainWindow.resize(548, 604)
15         MainWindow.setFocusPolicy(QtCore.Qt.StrongFocus)
16         self.centralwidget = QtWidgets.QWidget(MainWindow)
17         self.centralwidget.setObjectName("centralwidget")
18         self.nav = QtWidgets.QTreeWidget(self.centralwidget)
19         self.nav.setGeometry(QtCore.QRect(0, 0, 131, 551))
20         self.nav.setObjectName("nav")
21         item_0 = QtWidgets.QTreeWidgetItem(self.nav)
22         item_1 = QtWidgets.QTreeWidgetItem(item_0)
23         icon = QtGui.QIcon()
24         icon.addPixmap(QtGui.QPixmap("../../../../../用户/*****/My Documents/My Pictures/猫儿皱眉.gif"), QtGui.QIcon.Disabled, QtGui.QIcon.Off)
25         item_1.setIcon(0, icon)
26         item_1 = QtWidgets.QTreeWidgetItem(item_0)
27         item_1 = QtWidgets.QTreeWidgetItem(item_0)
28         item_0 = QtWidgets.QTreeWidgetItem(self.nav)
29         item_1 = QtWidgets.QTreeWidgetItem(item_0)
30         item_0 = QtWidgets.QTreeWidgetItem(self.nav)
31         self.frame_3 = QtWidgets.QFrame(self.centralwidget)
32         self.frame_3.setGeometry(QtCore.QRect(140, 10, 391, 541))
33         self.frame_3.setAutoFillBackground(True)
34         self.frame_3.setFrameShape(QtWidgets.QFrame.Panel)
35         self.frame_3.setFrameShadow(QtWidgets.QFrame.Raised)
36         self.frame_3.setObjectName("frame_3")
37         self.label_3 = QtWidgets.QLabel(self.frame_3)
38         self.label_3.setGeometry(QtCore.QRect(60, 30, 54, 12))
39         self.label_3.setObjectName("label_3")
40         self.frame_4 = QtWidgets.QFrame(self.centralwidget)
41         self.frame_4.setGeometry(QtCore.QRect(140, 10, 391, 541))
42         self.frame_4.setAutoFillBackground(True)
43         self.frame_4.setFrameShape(QtWidgets.QFrame.Panel)
44         self.frame_4.setFrameShadow(QtWidgets.QFrame.Raised)
45         self.frame_4.setObjectName("frame_4")
46         self.label_5 = QtWidgets.QLabel(self.frame_4)
47         self.label_5.setGeometry(QtCore.QRect(30, 30, 54, 12))
48         self.label_5.setObjectName("label_5")
49         self.frame_5 = QtWidgets.QFrame(self.centralwidget)
50         self.frame_5.setGeometry(QtCore.QRect(140, 10, 391, 541))
51         self.frame_5.setAutoFillBackground(True)
52         self.frame_5.setFrameShape(QtWidgets.QFrame.WinPanel)
53         self.frame_5.setFrameShadow(QtWidgets.QFrame.Raised)
54         self.frame_5.setObjectName("frame_5")
55         self.label_4 = QtWidgets.QLabel(self.frame_5)
56         self.label_4.setGeometry(QtCore.QRect(40, 60, 54, 12))
57         self.label_4.setObjectName("label_4")
58         MainWindow.setCentralWidget(self.centralwidget)
59         self.menubar = QtWidgets.QMenuBar(MainWindow)
60         self.menubar.setGeometry(QtCore.QRect(0, 0, 548, 23))
61         self.menubar.setObjectName("menubar")
62         MainWindow.setMenuBar(self.menubar)
63         self.statusbar = QtWidgets.QStatusBar(MainWindow)
64         self.statusbar.setObjectName("statusbar")
65         MainWindow.setStatusBar(self.statusbar)
66         
67         #注释掉信号槽部分
68         # self.retranslateUi(MainWindow)
69         # self.nav.itemClicked['QTreeWidgetItem*','int'].connect(self.nav.clear)
70         # QtCore.QMetaObject.connectSlotsByName(MainWindow)
71 
72     def retranslateUi(self, MainWindow):
73         _translate = QtCore.QCoreApplication.translate
74         MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))
75         self.nav.headerItem().setText(0, _translate("MainWindow", "测试工具"))
76         __sortingEnabled = self.nav.isSortingEnabled()
77         self.nav.setSortingEnabled(False)
78         self.nav.topLevelItem(0).setText(0, _translate("MainWindow", "个贷相关"))
79         self.nav.topLevelItem(0).child(0).setText(0, _translate("MainWindow", "绑房贷"))
80         self.nav.topLevelItem(0).child(1).setText(0, _translate("MainWindow", "查询用户数据"))
81         self.nav.topLevelItem(0).child(2).setText(0, _translate("MainWindow", "删除客户数据"))
82         self.nav.topLevelItem(1).setText(0, _translate("MainWindow", "外联相关"))
83         self.nav.topLevelItem(1).child(0).setText(0, _translate("MainWindow", "绑定平安保单"))
84         self.nav.topLevelItem(2).setText(0, _translate("MainWindow", "iiii相关"))
85         self.nav.setSortingEnabled(__sortingEnabled)
86         self.frame_3.setToolTip(_translate("MainWindow", "farme3"))
87         self.label_3.setText(_translate("MainWindow", "frame3"))
88         self.frame_4.setToolTip(_translate("MainWindow", "farme4"))
89         self.label_5.setText(_translate("MainWindow", "frame4"))
90         self.frame_5.setToolTip(_translate("MainWindow", "frame5"))
91         self.label_4.setText(_translate("MainWindow", "frame5"))

 

按钮文件,继承UI文件,并定义信号槽

mainButton.py

 1 __author__ = 'EX_WLJR_ZHANGYAMEI'
 2 from PyQt5 import QtCore, QtGui, QtWidgets
 3 from PyQt5.QtWidgets import QApplication,QMainWindow
 4 from mainUI import Ui_MainWindow
 5 import sys
 6 
 7 
 8 class mainButton(Ui_MainWindow):
 9     #继承UI,并添加信号槽
10     def setupUi(self, MainWindow):
11         #继承UI
12         super(mainButton,self).setupUi(MainWindow)
13         # Ui_MainWindow.setupUi(MainWindow)
14         self.frame_3.close()
15         self.frame_4.close()
16         self.frame_5.close()
17 
18         #添加信号槽
19         self.retranslateUi(MainWindow)
20         # self.tabWidget.setCurrentIndex(0)
21         self.nav.itemClicked['QTreeWidgetItem*','int'].connect(self.click01)
22         # self.tabWidget.tabBarDoubleClicked['int'].connect(self.tabRemove)
23 
24         QtCore.QMetaObject.connectSlotsByName(MainWindow)
25 
26     def __init__(self):
27         pass
28 
29     def click01(self,item,n):
30         # print(self.frame_3.wheel())
31         print(item.text(n),n,item)
32         if item.text(n)=='绑房贷':
33             print('******绑房贷**开始**********')
34             # self.tabWidget.setCurrentIndex(0)
35             # print(self.tabWidget.currentIndex())
36             # self.tabWidget.show()
37             # self.frame.show()
38             # self.frame_2.close()
39             self.frame_3.show()
40             self.frame_4.close()
41             self.frame_5.close()
42             print('******绑房贷**结束**********')
43         elif item.text(n)=='查询用户数据':
44             print('******查询用户数据**开始**********')
45             # self.tabWidget.setCurrentIndex(1)
46             # print(self.tabWidget.currentIndex())
47             # self.tabWidget.show()
48             # self.frame.close()
49             # self.frame_2.show()
50             self.frame_3.close()
51             self.frame_4.show()
52             self.frame_5.close()
53             print('******查询用户数据**结束**********')
54         else:
55             self.frame_3.close()
56             self.frame_4.close()
57             self.frame_5.show()
58             pass
59             # self.frame.close()
60             # self.frame_2.close()
61 
62     def tabRemove(self,index):
63         # self.tabWidget.tabBar(0).hide()
64         self.tabWidget.removeTab(index)
65 
66 if __name__ == '__main__':
67      app = QApplication(sys.argv)
68      #创建窗口
69      MainWindow=QtWidgets.QMainWindow()
70      #加载窗口
71      main = mainButton()
72      main.setupUi(MainWindow)
73      #窗口显示
74      MainWindow.show()
75      sys.exit(app.exec_())

 

转载于:https://www.cnblogs.com/zhangyamei/p/10431913.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/395061.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

学习之路~sqh

推荐博客 Edison Chou;Vamei;算法∙面试专题 - 简书;xingoo - 博客园;设计模式 极速理解设计模式系列【目录索引】- Caleung;Net设计模式 - 灵动生活;宅男程序员给老婆的计算机课程系列;C设计模…

python format函数保留两位小数_python format函数

在Python 3.0中,%操作符通过一个更强的格式化方法format()进行了增强。对str.format()的支持已经被反向移植到了Python 2.6在2.6中,8-bit字符串和Unicode字符串都有一个format()方法,这个方法会把字符串当作一个模版,通过传入的参…

蓝牙 sig base uuid_蓝牙模块采用陶瓷天线和PCB天线的区别

一、陶瓷天线陶瓷天线是一种适合于蓝牙设备使用的小型化天线,又分为块状陶瓷天线和多层陶瓷天线。陶瓷天线占用空间很小、性能比较好; 带宽窄,比较难做到多频段;有效提高主板的整合度,并可降低天线对ID的限制;需要在主…

kubernetes系列12—二个特色的存储卷configmap和secret

本文收录在容器技术学习系列文章总目录 1、configmap 1.1 认识configmap ConfigMap用于保存配置数据的键值对,可以用来保存单个属性,也可以用来保存配置文件。ConfigMap跟secret很类似,但它可以更方便地处理不包含敏感信息的字符串。 1.2 创建…

华为完成拉美铜网宽带G.fast技术部署测试

1/11/2016,英国大东通信巴拿马分公司日前与华为公司发布消息称,覆盖拉丁美洲地区的最快铜缆宽带服务系统成功完成初次测试。 作为巴拿马地区领先的移动宽带服务提供商,大东通信巴拿马分公司也是当地最大的电信服务提供商,此次与华为合作在现有…

kotlin调用类中的方法_一种轻松的方法来测试Kotlin中令人沮丧的静态方法调用

kotlin调用类中的方法by Oleksii Fedorov通过Oleksii Fedorov 一种轻松的方法来测试Kotlin中令人沮丧的静态方法调用 (A stress-free way to test frustrating static method calls in Kotlin) Let me make a wild guess… You have encountered some code in Kotlin that is …

python图像加密模块_使用Pycryp的图像加密和解密

这和加密或解密文本是一样的。示例首先导入一些模块:from Crypto.Cipher import AESfrom Crypto import Random然后,让我们生成一个键和一个初始化向量。key Random.new().read(AES.block_size)iv Random.new().read(AES.block_size)加密下面的代码加载…

遇到attemp to invoke virtual method

这个很大原因是没有预先初始化sdk,检查application的配置是否配置了application:name 转载于:https://www.cnblogs.com/caimuqing/p/5894099.html

app启动页自动跳转源码_关于移动端App启动页的策划方案

App启动页是指app在启东时需要加载必要的运行环境和配置,在这个过程中提示用户等待的一个过渡页面。在产品经理眼里启动页是app给予用户重要的第一印象;也是App最重要的黄金页面之一,所有用户100%都会看到的页面。启动页适合用来做以下几个事…

电信运营商占IDC市场65%:中国电信占行业半数以上

随着云计算、大数据的快速发展,作为重要基础设施的IDC数据中心也在高速扩张。 近日,DCA常务理事长何宝宏介绍,我国规划在建数据中心共计246个,总设计机架数约为103万个,总设计服务器规模约1326万台。在用超大型、大型数…

Python 日期和时间戳的转换

Python 日期和时间戳的转换 1. Python中处理时间的模块 Python中处理时间的模块有time、datetime和calendar。 在Python中表示时间的方式: 时间戳:10位整数位和若干小数位,例如 1551153156.6358607元组(struct_time): …

快应用比赛_我的应用如何在国际学生比赛中获得第三名

快应用比赛by Rafael Melo通过拉斐尔梅洛 我的应用如何在国际学生比赛中获得第三名 (How my App won third place in an International Student Competition) I developed an App that won third place at the IEEE Mobile Applications Development Contest 2017 (IEEEmadC 2…

JAVA中String类的intern()方法的作用

一般我们变成很少使用到 intern这个方法,今天我就来解释一下这个方法是干什么的,做什么用的 首先请大家看一个例子: public static void main(String[] args) throws Exception { String a "b" ; String b "b" ; …

java 如何排查内存溢出_java 内存溢出排查

测试代码,如下示例:import java.util.ArrayList;import java.util.List;/*** Description 测试内存溢出, 启动时设置参数,最大堆内存为1m, 内存溢出时dump出内存文件 -Xmx1m -XX:HeapDumpOutOfMemoryError* Author luzy* Date 2018/10/5 11:0…

《企业级ios应用开发实战》一2.2 iOS框架介绍

2.2 iOS框架介绍 iOS衍生自Mac OS X的成熟内核,但iOS操作系统更紧凑和高效,支持iPhone和iPod Touch的硬件。iOS继承了Mac OS X的风格,包括:统一的OS X 内核,针对网络的BSD套接字,以及Objective-C和C/C编译器…

python的opencv 车牌识别 开源_毕节进出口车牌识别系统怎么样

毕节进出口车牌识别系统怎么样 gzheu8il毕节进出口车牌识别系统怎么样 系统拓扑图如下:该系统以社区中心机房为枢纽,有机的将智慧家居住户、社区数字化服务、物业数字化管理、社区智能化管理结合起来,真正的实现:住户与住户之间的…

了解使用JavaScript进行面向对象编程的基础(并增强您的编码…

by Kris Baillargeon通过克里斯拜伦 学习使用JavaScript进行面向对象编程的基础知识(并增强您的编码能力!) (Learn the basics of object-oriented programming with JavaScript (and supercharge your coding abilities!)) As a moderator of the freeCodeCamp ch…

postgresql的别名要用双引号才可以

postgresql的别名要用双引号""才可以 转载于:https://www.cnblogs.com/handsome1013/p/10443001.html

imx6 mac地址设置

imx6的mac地址总是固定的值,所以需要更改,采用的方法是在uboot中设置环境变量,之后在kernel中使用uboot中设置的mac地址的值。本文记录更改的过程。 参考链接: http://www.cnblogs.com/zengjfgit/p/5711304.html uboot lib_arm/board.c …

java try catch陷阱_Java异常处理最佳实践及陷阱防范

原标题:Java异常处理最佳实践及陷阱防范出自《深夜里的程序猿》作者:wangzenghuang前言不管在我们的工作还是生活中,总会出现各种“错误”,各种突发的“异常”。无论我们做了多少准备,多少测试,这些异常总会…