• 使用QT设计师-信号和槽signal-slot(第一弹)


    自定义信号和槽的步骤:

    1、定义信号---signal1 = pyqtSignal()

    2、定义槽信号---def setSlot(self):

    3、连接信号和槽函数---signal1.connect(self.setSlot)

    4、发射信号---signal1.emit()

    案例1:

     1 from PyQt5.QtCore import QObject,pyqtSignal
     2 from PyQt5.QtWidgets import *
     3 import sys
     4 
     5 class Winfrom(QWidget):
     6     #定义各种信号
     7     signal1 = pyqtSignal()  #无参数的信号
     8     signal2 = pyqtSignal(int)   #带一个参数(整型)的信号
     9     signal3 = pyqtSignal(str)   #带一个参数(字符串)的信号
    10     signal4 = pyqtSignal(list)  #带一个参数(列表)的信号
    11     signal5 = pyqtSignal(dict)  #带一个参数(字典)的信号
    12     signal6 = pyqtSignal(int,str)   #带两个参数(整数,字符串)的信号
    13     signal7 = pyqtSignal([int,str],[str])   #带两个参数([整数,字符串]或者[字符串])的重载版本的信号
    14 
    15     def __init__(self,parent = None):
    16         super().__init__(parent)
    17         self.setWindowTitle('自定义信号和槽函数')
    18         self.resize(400,300)
    19         #将信号和槽连接
    20         self.signal1.connect(self.signal1Call)
    21         self.signal2.connect(self.signal2Call)
    22         self.signal3.connect(self.signal3Call)
    23         self.signal4.connect(self.signal4Call)
    24         self.signal5.connect(self.signal5Call)
    25         self.signal6.connect(self.signal6Call)
    26         self.signal7[int,str].connect(self.signal7Call)
    27         self.signal7[str].connect(self.signal7Calloverload)
    28 
    29         #发射信号
    30         self.signal1.emit()
    31         self.signal2.emit(1234)
    32         self.signal3.emit('')
    33         self.signal4.emit([1,'xiong',bool])
    34         self.signal5.emit({'xiong':'jt',"":1})
    35         self.signal6.emit(111,'信号和槽')
    36         self.signal7[int,str].emit(1314,'sb')
    37         self.signal7[str].emit('wtfk')
    38 
    39     #定义槽函数
    40     def signal1Call(self):
    41         print('signal1 emit')
    42 
    43     def signal2Call(self,int1):
    44         print('signal2 emit,value:',int1)
    45 
    46     def signal3Call(self,str1):
    47         print('signal3 emit,value:',str1)
    48 
    49     def signal4Call(self,list1):
    50         print('signal4 emit,value:',list1)
    51 
    52     def signal5Call(self,dict1):
    53         print('signal5 emit,value:',dict1)
    54 
    55     def signal6Call(self,int1,str1):
    56         print('signal6 emit,value:',int1,str1)
    57 
    58     def signal7Call(self,int1,str1):
    59         print('signal7 emit,value:',int1,str1)
    60 
    61     def signal7Calloverload(self,str1):
    62         print('signal7overload emit,value:',str1)
    63 
    64 if __name__ == '__main__':
    65     app = QApplication(sys.argv)
    66     win = Winfrom()
    67     win.show()
    68     sys.exit(app.exec_())

    案例2:

     1 from PyQt5 import QtCore 
     2 from PyQt5.QtWidgets import QApplication ,QWidget ,QHBoxLayout , QPushButton
     3 import sys    
     4     
     5 class CustWidget( QWidget ):
     6     
     7     def __init__(self, parent=None):
     8         super(CustWidget, self).__init__(parent)
     9         
    10         self.okButton = QPushButton("OK", self)
    11         #使用setObjectName设置对象名称
    12         self.okButton.setObjectName("okButton")        
    13         layout =  QHBoxLayout()
    14         layout.addWidget(self.okButton)
    15         self.setLayout(layout)                
    16         QtCore.QMetaObject.connectSlotsByName(self)
    17         
    18     @QtCore.pyqtSlot()    
    19     def on_okButton_clicked(self):
    20         print( "点击了OK按钮")
    21         
    22         
    23 if __name__ == "__main__":        
    24     app =  QApplication(sys.argv)
    25     win = CustWidget()
    26     win.show()
    27     sys.exit(app.exec_())

    案例3:

     1 from PyQt5 import QtCore, QtGui, QtWidgets
     2 
     3 class Ui_Dialog(object):
     4     def setupUi(self, Dialog):
     5         Dialog.setObjectName("Dialog")
     6         Dialog.resize(516, 364)
     7         Dialog.setSizeGripEnabled(True)
     8         self.textBrowser = QtWidgets.QTextBrowser(Dialog)
     9         self.textBrowser.setGeometry(QtCore.QRect(25, 20, 471, 192))
    10         self.textBrowser.setObjectName("textBrowser")
    11         self.pushButton1 = QtWidgets.QPushButton(Dialog)
    12         self.pushButton1.setGeometry(QtCore.QRect(90, 250, 91, 31))
    13         font = QtGui.QFont()
    14         font.setFamily("Adobe Myungjo Std M")
    15         font.setPointSize(12)
    16         font.setBold(True)
    17         font.setWeight(75)
    18         self.pushButton1.setFont(font)
    19         self.pushButton1.setObjectName("pushButton1")
    20         self.pushButton2 = QtWidgets.QPushButton(Dialog)
    21         self.pushButton2.setGeometry(QtCore.QRect(330, 250, 91, 31))
    22         font = QtGui.QFont()
    23         font.setFamily("Adobe Myungjo Std M")
    24         font.setPointSize(12)
    25         font.setBold(True)
    26         font.setWeight(75)
    27         self.pushButton2.setFont(font)
    28         self.pushButton2.setObjectName("pushButton2")
    29 
    30         self.retranslateUi(Dialog)
    31         QtCore.QMetaObject.connectSlotsByName(Dialog)
    32 
    33     def retranslateUi(self, Dialog):
    34         _translate = QtCore.QCoreApplication.translate
    35         Dialog.setWindowTitle(_translate("Dialog", "Dialog"))
    36         self.pushButton1.setText(_translate("Dialog", "button1"))
    37         self.pushButton2.setText(_translate("Dialog", "button2"))
    View Code
    from PyQt5.QtCore import *
    from PyQt5.QtWidgets import *
    from PyQt5 import QtWidgets
    from Ui_SignalSlot import Ui_Dialog
    
    
    class SignalSlot0(QDialog, Ui_Dialog):
        btn1_signal = pyqtSignal(int, str)
        btn2_signal = pyqtSignal(int, str)
            
        def __init__(self, parent=None):
            super(SignalSlot0, self).__init__(parent)
            self.setupUi(self)
            
            #self.btn1_signal.connect(self.btn1Call)
            #self.btn2_signal.connect(self.btn2Call)
        
        @pyqtSlot()
        def on_pushButton1_clicked(self):
            """
            Slot documentation goes here.
            """
            self.btn1_signal.connect(self.btnCall)
            self.btn1_signal.emit(1, '按钮1')
        
        @pyqtSlot()
        def on_pushButton2_clicked(self):
            """
            Slot documentation goes here.
            """
            self.btn2_signal.connect(self.btnCall)
            self.btn2_signal.emit(2, '按钮2')
            
        def btnCall(self, int1, str1):
            QMessageBox.information(self, 'information notice', 'Button{0} is clicked:{1}'.format(int1, str1), QMessageBox.Yes|QMessageBox.No, QMessageBox.Yes)
            
        def btn2Call(self):
            QMessageBox.information(self, 'information notice', 'Button2 clicked')
    
    
    if __name__ == "__main__":
        import sys
        app = QtWidgets.QApplication(sys.argv)
        ui = SignalSlot0()
        ui.show()
        sys.exit(app.exec_())
  • 相关阅读:
    less的使用
    04 LeetCode --- 反转整数
    03 LeetCode --- 反转整数
    数据结构--- 队列
    数据结构---栈
    数据结构---列表与数组
    04-配置阿里云yum源并启动nginx服务
    03-linux命令
    02-windows下vmware配置nat网络
    01-xshell连接linux
  • 原文地址:https://www.cnblogs.com/XJT2018/p/9867741.html
Copyright © 2020-2023  润新知