在PyQt5中,可以通過使用信號和槽機制實現子窗口數據傳遞。具體步驟如下:
定義一個信號類,用于傳遞數據。在子窗口類中添加一個信號對象,例如:dataChanged = QtCore.pyqtSignal(str)
在子窗口中需要傳遞數據的地方,使用信號對象發出信號,例如:self.dataChanged.emit(data)
在主窗口中連接子窗口的信號和槽。在創建子窗口對象后,使用connect()
方法將子窗口的信號連接到主窗口的槽函數上,例如:subwindow.dataChanged.connect(self.handleDataChanged)
在主窗口中定義槽函數,用于接收子窗口傳遞的數據,例如:def handleDataChanged(self, data):
這樣,當子窗口發出信號時,主窗口中的槽函數就會被調用,可以在槽函數中獲取傳遞的數據并進行處理。
完整示例代碼如下:
from PyQt5 import QtCore, QtGui, QtWidgets
class SubWindow(QtWidgets.QMainWindow):
dataChanged = QtCore.pyqtSignal(str)
def __init__(self):
super().__init__()
self.button = QtWidgets.QPushButton("傳遞數據", self)
self.button.clicked.connect(self.sendData)
def sendData(self):
data = "Hello World"
self.dataChanged.emit(data)
class MainWindow(QtWidgets.QMainWindow):
def __init__(self):
super().__init__()
self.subwindow = SubWindow()
self.subwindow.dataChanged.connect(self.handleDataChanged)
def handleDataChanged(self, data):
print(data)
if __name__ == "__main__":
import sys
app = QtWidgets.QApplication(sys.argv)
window = MainWindow()
window.show()
sys.exit(app.exec_())
在這個示例中,子窗口中的按鈕被點擊后會發送一個dataChanged
信號,并傳遞字符串"Hello World"。主窗口中的槽函數handleDataChanged
會接收到這個信號,并打印出傳遞的數據。