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_())
pyqt 两个视图来回切换
最新推荐文章于 2024-10-08 12:37:10 发布