PyQt5 & PySide2信號與槽機制1


pyside2&pyqt5的信號與槽機制

1、信號與槽的兩種寫法
第一種情況:

from PySide2 import QtWidgets, QtCore
import sys
if __name__ == "__main__":
    app = QtWidgets.QApplication(sys.argv)
    widget = QtWidgets.QWidget()
    btn = QtWidgets.QPushButton(widget)
    btn.clicked.connect(widget.close)
    widget.show()
    sys.exit(app.exec_())

第二種情況:

from PySide2 import QtWidgets, QtCore
import sys
if __name__ == "__main__":
    app = QtWidgets.QApplication(sys.argv)
    widget = QtWidgets.QWidget()
    btn = QtWidgets.QPushButton(widget)
    QtCore.QObject.connect(btn,QtCore.SIGNAL("clicked()"),widget,QtCore.SLOT("close()"))
    widget.show()
    sys.exit(app.exec_())

2、自定義槽函數

from PySide2 import QtWidgets, QtCore
import sys 
if __name__ == "__main__":
    app = QtWidgets.QApplication(sys.argv)
    widget = QtWidgets.QWidget()
    btn = QtWidgets.QPushButton(widget)
    @QtCore.Slot()
    def changeTex():
        btn.setText("ok")
    btn.clicked.connect(changeTex)    
    widget.show()
    sys.exit(app.exec_())

3、帶參數槽函數
(1)lambad寫法:

from PySide2 import QtWidgets,QtCore
import sys  
class MyForm(QtWidgets.QWidget):  
    def __init__(self, parent=None):  
        super(MyForm, self).__init__(parent)
        button1 = QtWidgets.QPushButton(self)   
        button1.clicked.connect(lambda: self.on_button(1))  
    def on_button(self, n):  
        print('Button {0} clicked'.format(n))  
  
if __name__ == "__main__":  
    import sys  
    app = QtWidgets.QApplication(sys.argv)  
    form = MyForm()  
    form.show()  
    app.exec_()  

(2)使用functools里的partial函數。

from functools import partial 
from PySide2 import QtWidgets,QtCore
import sys  
class MyForm(QtWidgets.QWidget):  
    def __init__(self, parent=None):  
        super(MyForm, self).__init__(parent)
        button1 = QtWidgets.QPushButton(self)   
        button1.clicked.connect(partial(self.on_button, 1))  
    def on_button(self, n):  
        print('Button {0} clicked'.format(n))  

if __name__ == "__main__":  
    import sys  
    app = QtWidgets.QApplication(sys.argv)  
    form = MyForm()  
    form.show()  
    app.exec_()  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM