自定义信号:
ui.py.
- # -*- coding: utf-8 -*-
- # Form implementation generated from reading ui file 'class_ts.ui'
- #
- # Created by: PyQt5 UI code generator 5.11.3
- #
- # WARNING! All changes made in this file will be lost!
- from PyQt5 import QtCore, QtGui, QtWidgets
- class Ui_MainWindow(object):
- def setupUi(self, MainWindow):
- MainWindow.setObjectName("MainWindow")
- MainWindow.resize(537, 509)
- self.centralwidget = QtWidgets.QWidget(MainWindow)
- self.centralwidget.setObjectName("centralwidget")
- self.verticalLayout = QtWidgets.QVBoxLayout(self.centralwidget)
- self.verticalLayout.setObjectName("verticalLayout")
- spacerItem = QtWidgets.QSpacerItem(20, 40, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Expanding)
- self.verticalLayout.addItem(spacerItem)
- self.horizontalLayout = QtWidgets.QHBoxLayout()
- self.horizontalLayout.setObjectName("horizontalLayout")
- spacerItem1 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
- self.horizontalLayout.addItem(spacerItem1)
- self.label = QtWidgets.QLabel(self.centralwidget)
- self.label.setObjectName("label")
- self.horizontalLayout.addWidget(self.label)
- self.lineEdit = QtWidgets.QLineEdit(self.centralwidget)
- self.lineEdit.setMinimumSize(QtCore.QSize(150, 30))
- self.lineEdit.setMaximumSize(QtCore.QSize(150, 30))
- self.lineEdit.setObjectName("lineEdit")
- self.horizontalLayout.addWidget(self.lineEdit)
- spacerItem2 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
- self.horizontalLayout.addItem(spacerItem2)
- self.verticalLayout.addLayout(self.horizontalLayout)
- self.horizontalLayout_2 = QtWidgets.QHBoxLayout()
- self.horizontalLayout_2.setObjectName("horizontalLayout_2")
- spacerItem3 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
- self.horizontalLayout_2.addItem(spacerItem3)
- self.label_2 = QtWidgets.QLabel(self.centralwidget)
- self.label_2.setObjectName("label_2")
- self.horizontalLayout_2.addWidget(self.label_2)
- self.lineEdit_2 = QtWidgets.QLineEdit(self.centralwidget)
- self.lineEdit_2.setMinimumSize(QtCore.QSize(150, 30))
- self.lineEdit_2.setMaximumSize(QtCore.QSize(150, 30))
- self.lineEdit_2.setObjectName("lineEdit_2")
- self.horizontalLayout_2.addWidget(self.lineEdit_2)
- spacerItem4 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
- self.horizontalLayout_2.addItem(spacerItem4)
- self.verticalLayout.addLayout(self.horizontalLayout_2)
- self.pushButton = QtWidgets.QPushButton(self.centralwidget)
- self.pushButton.setMinimumSize(QtCore.QSize(200, 50))
- self.pushButton.setMaximumSize(QtCore.QSize(200, 50))
- self.pushButton.setStyleSheet("background-color: rgb(85, 170, 0);")
- self.pushButton.setObjectName("pushButton")
- self.verticalLayout.addWidget(self.pushButton, 0, QtCore.Qt.AlignHCenter)
- spacerItem5 = QtWidgets.QSpacerItem(20, 40, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Expanding)
- self.verticalLayout.addItem(spacerItem5)
- MainWindow.setCentralWidget(self.centralwidget)
- self.menubar = QtWidgets.QMenuBar(MainWindow)
- self.menubar.setGeometry(QtCore.QRect(0, 0, 537, 23))
- self.menubar.setObjectName("menubar")
- MainWindow.setMenuBar(self.menubar)
- self.statusbar = QtWidgets.QStatusBar(MainWindow)
- self.statusbar.setObjectName("statusbar")
- MainWindow.setStatusBar(self.statusbar)
- self.retranslateUi(MainWindow)
- QtCore.QMetaObject.connectSlotsByName(MainWindow)
- def retranslateUi(self, MainWindow):
- _translate = QtCore.QCoreApplication.translate
- MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))
- self.label.setText(_translate("MainWindow", "帐号"))
- self.label_2.setText(_translate("MainWindow", "密码"))
- self.pushButton.setText(_translate("MainWindow", "登录"))
- View Code
1. 装饰器信号
- # -*- coding:utf-8 -*-
- from PyQt5.Qt import *
- from class_ts import Ui_MainWindow
- class Windows(QMainWindow, Ui_MainWindow):
- def __init__(self):
- super().__init__()
- self.setWindowTitle("装饰器连接信号")
- self.resize(500,500)
- self.setupUi(self)
- @pyqtSlot(bool)
- def on_pushButton_clicked(self,val): # on_btn_clicked 固定的函数名
- print("按纽被点击了",val)
- @pyqtSlot()
- def on_pushButton_pressed(self): # on_btn_clicked 固定的函数名
- print("按纽被按下了")
- if __name__=="__main__":
- import sys
- App = QApplication(sys.argv)
- Windows = Windows()
- Windows.show()
- sys.exit(App.exec_())
- View Code
2. 自定义信号传送数据
- # -*- coding:utf-8 -*-
- from PyQt5.Qt import *
- # 定义一个类, 重写 QPushButton 鼠标点击事件
- class Btn(QPushButton):
- # 自定义一个信号
- # rightClicked = pyqtSignal(str)
- rightClicked = pyqtSignal([str],[int])
- def mousePressEvent(self,evt):
- super().mousePressEvent(evt)
- print(evt)
- print(evt.button())
- # QMouseEvent
- # 判断某个键点击了
- if evt.button() == Qt.RichText: # RichText = 1 是左键, RightButton = 2 是右键
- print("应该发射左击信号了")
- # self.rightClicked.emit(self.text())
- self.rightClicked[str].emit(self.text())
- self.rightClicked[int].emit(888)
- class Windows(QWidget):
- def __init__(self):
- super().__init__()
- self.setWindowTitle("ui 学习")
- self.resize(500,500)
- # self.setupUi(self)
- self.setup_ui()
- def setup_ui(self):
- # 创建对象
- btn = Btn("xxxx",self)
- # rightClicked 是自定义的信号
- # content 接收数据
- btn.rightClicked[int].connect(lambda content:print("按纽被点击了",content))
- if __name__=="__main__":
- import sys
- App = QApplication(sys.argv)
- Windows = Windows()
- Windows.show()
- sys.exit(App.exec_())
- View Code
来源: http://www.bubuko.com/infodetail-2942201.html