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_()