pyqt5核心-信号与槽(第二弹)

果:

 1 from PyQt5 import QtCore, QtGui, QtWidgets
 2 
 3 class Ui_Form(object):
 4     def setupUi(self, Form):
 5         Form.setObjectName("Form")
 6         Form.resize(715, 225)
 7         self.controlsGroup = QtWidgets.QGroupBox(Form)
 8         self.controlsGroup.setGeometry(QtCore.QRect(10, 20, 451, 151))
 9         self.controlsGroup.setObjectName("controlsGroup")
10         self.widget = QtWidgets.QWidget(self.controlsGroup)
11         self.widget.setGeometry(QtCore.QRect(10, 40, 411, 30))
12         self.widget.setObjectName("widget")
13         self.horizontalLayout = QtWidgets.QHBoxLayout(self.widget)
14         self.horizontalLayout.setContentsMargins(0, 0, 0, 0)
15         self.horizontalLayout.setObjectName("horizontalLayout")
16         self.label = QtWidgets.QLabel(self.widget)
17         self.label.setObjectName("label")
18         self.horizontalLayout.addWidget(self.label)
19         self.numberSpinBox = QtWidgets.QSpinBox(self.widget)
20         self.numberSpinBox.setObjectName("numberSpinBox")
21         self.horizontalLayout.addWidget(self.numberSpinBox)
22         self.styleCombo = QtWidgets.QComboBox(self.widget)
23         self.styleCombo.setObjectName("styleCombo")
24         self.styleCombo.addItem("")
25         self.styleCombo.addItem("")
26         self.styleCombo.addItem("")
27         self.horizontalLayout.addWidget(self.styleCombo)
28         self.label_2 = QtWidgets.QLabel(self.widget)
29         self.label_2.setObjectName("label_2")
30         self.horizontalLayout.addWidget(self.label_2)
31         self.printButton = QtWidgets.QPushButton(self.widget)
32         self.printButton.setObjectName("printButton")
33         self.horizontalLayout.addWidget(self.printButton)
34         self.widget1 = QtWidgets.QWidget(self.controlsGroup)
35         self.widget1.setGeometry(QtCore.QRect(10, 100, 201, 30))
36         self.widget1.setObjectName("widget1")
37         self.horizontalLayout_2 = QtWidgets.QHBoxLayout(self.widget1)
38         self.horizontalLayout_2.setContentsMargins(0, 0, 0, 0)
39         self.horizontalLayout_2.setObjectName("horizontalLayout_2")
40         self.previewStatus = QtWidgets.QCheckBox(self.widget1)
41         self.previewStatus.setObjectName("previewStatus")
42         self.horizontalLayout_2.addWidget(self.previewStatus)
43         self.previewButton = QtWidgets.QPushButton(self.widget1)
44         self.previewButton.setObjectName("previewButton")
45         self.horizontalLayout_2.addWidget(self.previewButton)
46         self.resultGroup = QtWidgets.QGroupBox(Form)
47         self.resultGroup.setGeometry(QtCore.QRect(470, 20, 231, 151))
48         self.resultGroup.setObjectName("resultGroup")
49         self.resultLabel = QtWidgets.QLabel(self.resultGroup)
50         self.resultLabel.setGeometry(QtCore.QRect(20, 30, 191, 101))
51         self.resultLabel.setObjectName("resultLabel")
52 
53         self.retranslateUi(Form)
54         QtCore.QMetaObject.connectSlotsByName(Form)
55 
56     def retranslateUi(self, Form):
57         _translate = QtCore.QCoreApplication.translate
58         Form.setWindowTitle(_translate("Form", "打印控件"))
59         self.controlsGroup.setTitle(_translate("Form", "打印控制"))
60         self.label.setText(_translate("Form", "打印份数:"))
61         self.styleCombo.setItemText(0, _translate("Form", "A3"))
62         self.styleCombo.setItemText(1, _translate("Form", "A4"))
63         self.styleCombo.setItemText(2, _translate("Form", "A5"))
64         self.label_2.setText(_translate("Form", "纸张类型:"))
65         self.printButton.setText(_translate("Form", "打印"))
66         self.previewStatus.setText(_translate("Form", "全屏预览"))
67         self.previewButton.setText(_translate("Form", "预览"))
68         self.resultGroup.setTitle(_translate("Form", "操作结果"))
69         self.resultLabel.setText(_translate("Form", "<html><head/><body><p><br/></p></body></html>"))
View Code
 1 # -*- coding: utf-8 -*-
 2 
 3 import sys     
 4 from PyQt5.QtWidgets import QApplication , QMainWindow
 5 from MainWinSignalSlog02 import Ui_Form
 6 from PyQt5.QtCore import pyqtSignal , Qt 
 7 
 8 class MyMainWindow(QMainWindow, Ui_Form):
 9     helpSignal = pyqtSignal(str)
10     printSignal = pyqtSignal(list)
11     # 声明一个多重载版本的信号,包括了一个带int和str类型参数的信号,以及带str参数的信号
12     previewSignal = pyqtSignal([int,str],[str])
13     
14     def __init__(self, parent=None):    
15         super(MyMainWindow, self).__init__(parent)
16         self.setupUi(self)
17         self.initUI()
18         
19     def initUI(self):      
20         self.helpSignal.connect(self.showHelpMessage)
21         self.printSignal.connect(self.printPaper)
22         self.previewSignal[str].connect(self.previewPaper)
23         self.previewSignal[int,str].connect(self.previewPaperWithArgs)  
24         
25         self.printButton.clicked.connect(self.emitPrintSignal)
26         self.previewButton.clicked.connect(self.emitPreviewSignal)
27 
28     # 发射预览信号
29     def emitPreviewSignal(self):
30         if self.previewStatus.isChecked() == True:
31             self.previewSignal[int,str].emit(1080," Full Screen")
32         elif self.previewStatus.isChecked() == False:
33             self.previewSignal[str].emit("Preview")
34 
35     # 发射打印信号
36     def emitPrintSignal(self):
37         pList = []
38         pList.append(self.numberSpinBox.value() )
39         pList.append(self.styleCombo.currentText())
40         self.printSignal.emit(pList)
41         
42     def printPaper(self,list):
43         self.resultLabel.setText("打印: "+"份数:"+ str(list[0]) +" 纸张:"+str(list[1]))
44 
45     def previewPaperWithArgs(self,style,text):
46         self.resultLabel.setText(str(style)+text)        
47 
48     def previewPaper(self,text):
49         self.resultLabel.setText(text)  
50         
51     # 重载点击键盘事件    
52     def keyPressEvent(self, event):
53         if event.key() == Qt.Key_F1:
54             self.helpSignal.emit("help message")
55 
56     # 显示帮助消息
57     def showHelpMessage(self,message):
58         self.resultLabel.setText(message)
59         self.statusBar().showMessage(message)
60                  
61 if __name__=="__main__":  
62     app = QApplication(sys.argv)  
63     win = MyMainWindow()  
64     win.show()  
65     sys.exit(app.exec_())  

 

原文地址:https://www.cnblogs.com/XJT2018/p/9869536.html