pyqt5 TabWidget

来源:互联网 发布:钢铁力量天箭数据 编辑:程序博客网 时间:2024/06/05 18:39

希望在一个图片窗口里利用tabwidget显示多幅图片,或者同时可显示图片和视频

图片显示通过:QGraphicsView, QGraphicsScene,QGraphicsPixmapItem

视频播放通过QMediaplayer


from PyQt5 import QtWidgets,QtCorefrom PyQt5.QtWidgets import QApplication,QMainWindow,QGridLayout,QTabWidget,QPushButton,\QVBoxLayout,QHBoxLayout,QWidget,QGraphicsView,QGraphicsScene,\QGraphicsPixmapItem,QTabBarfrom PyQt5.QtMultimediaWidgets import QVideoWidgetfrom PyQt5.QtMultimedia import QMediaMetaData, QMediaPlayer,QMediaContentfrom PyQt5.QtGui import QPixmapfrom PyQt5 import QtGuifrom PyQt5.QtCore import QUrlclass MainWindow(QMainWindow):"""docstring for MainWindow"""def __init__(self):super(MainWindow, self).__init__()self.setupUi(self)def setupUi(self,MainWindow):MainWindow.setObjectName("MainWindow")MainWindow.resize(800,600)self.centralwidget = QtWidgets.QWidget(MainWindow)gridlayout = QGridLayout(self.centralwidget)hlayout = QHBoxLayout()self.button1 = QPushButton(' add image ')self.button3 = QPushButton('add video')self.button2 = QPushButton('remove')self.playbutton = QPushButton('play')self.stopbutton = QPushButton('stop')hlayout.addWidget(self.button1)hlayout.addWidget(self.button3)hlayout.addWidget(self.button2)hlayout.addWidget(self.playbutton)hlayout.addWidget(self.stopbutton)self.scene = QGraphicsScene()self.item = QGraphicsPixmapItem()# imgpath = 'C:/Users/liesmars/Desktop/1.jpg'self.item.setPixmap(QtGui.QPixmap(imgpath))self.scene.addItem(self.item)self.graphicsview = QGraphicsView()self.graphicsview.setScene(self.scene)self.tabwidget = QTabWidget()vlayout = QVBoxLayout()vlayout.addLayout(hlayout)vlayout.addWidget(self.tabwidget)MainWindow.setCentralWidget(self.centralwidget)gridlayout.addLayout(vlayout,0,0,1,1)self.retranslateUi(MainWindow)QtCore.QMetaObject.connectSlotsByName(MainWindow)def retranslateUi(self, MainWindow):self.button1.clicked.connect(self.addTab)self.button2.clicked.connect(self.closeTab)self.button3.clicked.connect(self.addVideo)self.playbutton.clicked.connect(self.palyMedia)self.stopbutton.clicked.connect(self.stopMedia)passdef addTab(self,signal):scene = QGraphicsScene()item = QGraphicsPixmapItem()# imgpath = 'C:/Users/liesmars/Desktop/1.jpg'item.setPixmap(QtGui.QPixmap(imgpath))scene.addItem(item)graphicsview = QGraphicsView()graphicsview.setScene(scene)self.tabwidget.addTab(graphicsview,"tab2")self.tabwidget.setCurrentWidget(graphicsview)def addVideo(self,signal):videowidget = QVideoWidget()self.videoplayer = QMediaPlayer(None, QMediaPlayer.VideoSurface)self.videoplayer.setVideoOutput(videowidget)# videopath = 'C:/Users/liesmars/Desktop/1.mp4'self.videoplayer.setMedia(QMediaContent(QUrl.fromLocalFile(videopath)))self.tabwidget.addTab(videowidget,"tab4")self.tabwidget.setCurrentWidget(videowidget)def closeTab(self):tabID = self.tabwidget.currentIndex()self.tabwidget.removeTab(tabID)passdef palyMedia(self,signal):self.videoplayer.play()passdef stopMedia(self,signal):self.videoplayer.pause()passif __name__ == '__main__':import sysapp = QApplication(sys.argv)mainWin = MainWindow()# app.setActiveWindow(mainWin)mainWin.show()sys.exit(app.exec_())