pyqt 两个视图来回切换

import sys
from PyQt5.QtWidgets import QApplication, QMainWindow, QVBoxLayout, QWidget, QPushButton, QLabel, QStackedWidget
from PyQt5.QtCore import pyqtSignal, QObject

class Communicate(QObject):
    data_changed = pyqtSignal(str)

class LeftView(QWidget):
    def __init__(self, right_view):
        super().__init__()
        self.right_view = right_view
        self.communicate = Communicate()

        layout = QVBoxLayout()
        self.setLayout(layout)

        self.button = QPushButton('增加数据')
        self.button.clicked.connect(self.add_data)
        layout.addWidget(self.button)

        self.communicate.data_changed.connect(self.right_view.update_data)

    def add_data(self):
        data = "新数据"
        self.communicate.data_changed.emit(data)

class RightView(QWidget):
    def __init__(self):
        super().__init__()
        layout = QVBoxLayout()
        self.setLayout(layout)

        self.label = QLabel('等待数据...')
        layout.addWidget(self.label)

    def update_data(self, data):
        current_text = self.label.text()
        new_text = f"{current_text}\n{data}"
        self.label.setText(new_text)

class MainWindow(QMainWindow):
    def __init__(self):
        super().__init__()

        # 创建视图
        self.right_view = RightView()
        self.left_view = LeftView(self.right_view)

        # 使用 QStackedWidget 来切换视图
        self.stacked_widget = QStackedWidget()
        self.stacked_widget.addWidget(self.left_view)
        self.stacked_widget.addWidget(self.right_view)

        # 创建切换按钮
        self.switch_button = QPushButton('切换到右边视图')
        self.switch_button.clicked.connect(self.toggle_view)

        # 主布局
        main_layout = QVBoxLayout()
        main_layout.addWidget(self.switch_button)
        main_layout.addWidget(self.stacked_widget)

        central_widget = QWidget()
        central_widget.setLayout(main_layout)
        self.setCentralWidget(central_widget)

    def toggle_view(self):
        # 切换视图
        current_index = self.stacked_widget.currentIndex()
        new_index = 1 - current_index
        self.stacked_widget.setCurrentIndex(new_index)
        self.switch_button.setText('切换到左边视图' if new_index == 1 else '切换到右边视图')

if __name__ == '__main__':
    app = QApplication(sys.argv)

    window = MainWindow()
    window.setWindowTitle('切换视图示例')
    window.resize(800, 600)
    window.show()

    sys.exit(app.exec_())
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值