,可以通过使用QStackedWidget来实现。QStackedWidget是一个容器小部件,它可以在同一位置显示多个子部件,但只有一个子部件是可见的。
首先,需要导入PyQt5库和相关模块:
from PyQt5.QtWidgets import QApplication, QMainWindow, QWidget, QVBoxLayout, QStackedWidget
from PyQt5.QtMultimedia import QMediaPlayer, QMediaContent
from pyqtgraph import PlotWidget
然后,创建一个主窗口类,并在其中添加一个QStackedWidget作为主窗口的中心部件:
class MainWindow(QMainWindow):
def __init__(self):
super().__init__()
self.setWindowTitle("Video Player and Plot Widget")
self.stacked_widget = QStackedWidget()
self.setCentralWidget(self.stacked_widget)
接下来,创建一个QWidget子类用于显示视频播放器,并将其添加到QStackedWidget中:
class VideoPlayerWidget(QWidget):
def __init__(self):
super().__init__()
layout = QVBoxLayout()
self.setLayout(layout)
video_player = QVideoPlayer()
layout.addWidget(video_player)
self.video_player = video_player
然后,创建另一个QWidget子类用于显示PlotWidget,并将其添加到QStackedWidget中:
class PlotWidgetWidget(QWidget):
def __init__(self):
super().__init__()
layout = QVBoxLayout()
self.setLayout(layout)
plot_widget = PlotWidget()
layout.addWidget(plot_widget)
self.plot_widget = plot_widget
在主窗口类的初始化方法中,创建VideoPlayerWidget和PlotWidgetWidget实例,并将它们添加到QStackedWidget中:
class MainWindow(QMainWindow):
def __init__(self):
super().__init__()
self.setWindowTitle("Video Player and Plot Widget")
self.stacked_widget = QStackedWidget()
self.setCentralWidget(self.stacked_widget)
video_player_widget = VideoPlayerWidget()
self.stacked_widget.addWidget(video_player_widget)
plot_widget_widget = PlotWidgetWidget()
self.stacked_widget.addWidget(plot_widget_widget)
最后,可以通过切换QStackedWidget的当前索引来显示不同的子部件。例如,可以在主窗口类中添加一个方法来切换到视频播放器界面:
class MainWindow(QMainWindow):
# ...
def show_video_player(self):
self.stacked_widget.setCurrentIndex(0)
类似地,可以添加一个方法来切换到PlotWidget界面:
class MainWindow(QMainWindow):
# ...
def show_plot_widget(self):
self.stacked_widget.setCurrentIndex(1)
完整的代码示例:
from PyQt5.QtWidgets import QApplication, QMainWindow, QWidget, QVBoxLayout, QStackedWidget
from PyQt5.QtMultimedia import QMediaPlayer, QMediaContent
from pyqtgraph import PlotWidget
class VideoPlayerWidget(QWidget):
def __init__(self):
super().__init__()
layout = QVBoxLayout()
self.setLayout(layout)
video_player = QMediaPlayer()
layout.addWidget(video_player)
self.video_player = video_player
class PlotWidgetWidget(QWidget):
def __init__(self):
super().__init__()
layout = QVBoxLayout()
self.setLayout(layout)
plot_widget = PlotWidget()
layout.addWidget(plot_widget)
self.plot_widget = plot_widget
class MainWindow(QMainWindow):
def __init__(self):
super().__init__()
self.setWindowTitle("Video Player and Plot Widget")
self.stacked_widget = QStackedWidget()
self.setCentralWidget(self.stacked_widget)
video_player_widget = VideoPlayerWidget()
self.stacked_widget.addWidget(video_player_widget)
plot_widget_widget = PlotWidgetWidget()
self.stacked_widget.addWidget(plot_widget_widget)
def show_video_player(self):
self.stacked_widget.setCurrentIndex(0)
def show_plot_widget(self):
self.stacked_widget.setCurrentIndex(1)
if __name__ == "__main__":
app = QApplication([])
window = MainWindow()
window.show()
app.exec_()
这样,就可以在PyQt5中创建不重叠的QVideoPlayer和PlotWidget,并通过QStackedWidget在同一位置显示它们。
领取专属 10元无门槛券
手把手带您无忧上云