Python事多,做个笔记,区分。

PySide2 Signal Slot Test

from PySide2.QtWidgets import QMainWindow,QApplication,QWidget,QPushButton
from PySide2 import QtWidgets
from PySide2.QtCore import Slot, Signal

import sys

class MyCenWidget(QWidget):

    closeSignal = Signal()

    quitSignal = Signal()

    def __init__(self,parent = None):
        super(MyCenWidget, self).__init__(parent)
        # first create layout
        self.createAndSetLayout()
        # add widget to my layout
        self.createButtons()

    def createAndSetLayout(self):
        self.mainLayout = QtWidgets.QHBoxLayout()
        self.setLayout(self.mainLayout)

    def createButtons(self):
        self.closeBtn = QPushButton(self)
        self.closeBtn.setText("Close")
        self.closeBtn.clicked.connect(self.closeSignal)  # 信号连接信号
        self.mainLayout.addWidget(self.closeBtn)

        # Quit button settings
        self.quitBtn = QPushButton(self)
        self.quitBtn.setText("Quit")
        self.quitBtn.clicked.connect(self.quitSlot)
        self.mainLayout.addWidget(self.quitBtn)

    def quitSlot(self):
        print("我的中心控件点了quit button")
        self.quitSignal.emit()

class MyWindow(QMainWindow):
    def __init__(self):
        super(MyWindow, self).__init__()

        # create my widget
        self.setupMenuBar()
        # bind my widget to function
        self.accessMenuBar()

        # take my widget to here
        cenWidget = MyCenWidget()  # 野指针
        cenWidget.closeSignal.connect(self.close)  # 从我定义的窗口里发射的信号,这个是closeSignal
        cenWidget.quitSignal.connect(self.close)

        
        self.setCentralWidget(cenWidget) # 基类有个函数让我设置它到我的QMainWindow

    def setupMenuBar(self):
        parentMenuBar = self.menuBar()

        fileMenu = parentMenuBar.addMenu("File")
        self.newAction = fileMenu.addAction("new")

        editMenu = parentMenuBar.addMenu("Edit")
        self.undoAction = editMenu.addAction("undo")


    # make connection new action
    def accessMenuBar(self):
        self.newAction.triggered.connect(self.newSlot)

    @Slot(bool)
    def newSlot(self, checked):
        print("into my new slot")


if __name__ == "__main__":
    app = QApplication(sys.argv)
    print("My window argv:", sys.argv)
    w = MyWindow()
    w.show()
    app.exec_()
View Code

相关文章: