窗口关闭而不是打开新窗口

时间:2021-04-25 08:44:15

标签: python python-3.x pyqt5

我正在制作一个 python 应用程序,它应该在单击按钮时打开一个新窗口。但不是打开新的,而是整个应用程序关闭,没有任何错误。

我确保在此文件中导入了正确的 py 文件。这是我在第一个窗口中的按钮代码

        self.playbackButton = QPushButton(self)
        self.playbackButton.setText("Playback")
        self.playbackButton.setStyleSheet("QPushButton::hover {"
                                 "background-color: #fbc531;}"
                                 "QPushButton {"
                                 "background-color: #e1b12c;"
                                 "padding: 10px;}")
        self.playbackButton.clicked.connect(self.pb)

def pb(self):
        self.myOtherWindow1 = PlaybackWindow()
        self.myOtherWindow1.open()

这是第二个窗口。这是应该在单击“播放”按钮时打开的窗口。

from PyQt5.QtMultimedia import QCameraInfo
from PyQt5.QtMultimediaWidgets import QCameraViewfinder
from PyQt5.QtWidgets import *
from PyQt5.QtGui import *
from PyQt5.QtMultimedia import QMediaPlayer, QMediaContent
from PyQt5.QtMultimediaWidgets import QVideoWidget
from PyQt5.QtCore import Qt, QUrl, QTimer
import sys
import cv2
import numpy as np


class PlaybackWindow(QWidget):

    def __init__(self):
        super().__init__()

        self.setWindowTitle("Iris")
        self.setWindowIcon(QIcon('logo.png'))
        self.setGeometry(300, 100, 1300, 800)
        self.setStyleSheet("background-color: #2f3640")

        flags = Qt.WindowFlags(Qt.FramelessWindowHint)
        self.setWindowFlags(flags)

        self.playbackUI()

    def playbackUI(self):

        x = QPushButton("", self)
        x.setGeometry(1230, 0, 100, 30)
        x.clicked.connect(self.close)
        x.setIcon(QIcon('x.png'))
        x.setStyleSheet("border: none;")

        self.playBox = QGroupBox(self)
        self.playBox.setStyleSheet("background-color: #353b48;"
                                   "border: none;")
        self.playBox.setGeometry(20, 20, 1250, 750)

        self.mediaPlayer = QMediaPlayer(None, QMediaPlayer.VideoSurface)

        videowidget = QVideoWidget()

        self.openBtn = QPushButton('Open Video')
        self.openBtn.setStyleSheet("QPushButton::hover {"
                                        "background-color: #fbc531;}"
                                        "QPushButton {"
                                        "background-color: #e1b12c;"
                                        "padding: 10px;}")
        self.openBtn.clicked.connect(self.open_file)

        self.playBtn = QPushButton()
        self.playBtn.setEnabled(False)
        self.playBtn.setStyleSheet("QPushButton::hover {"
                                        "background-color: #fbc531;}"
                                        "QPushButton {"
                                        "background-color: #e1b12c;"
                                        "padding: 10px;}")
        self.playBtn.setIcon(self.style().standardIcon(QStyle.SP_MediaPlay))
        self.playBtn.clicked.connect(self.play_video)
        self.slider = QSlider(Qt.Horizontal)
        self.slider.setRange(0, 0)
        self.slider.sliderMoved.connect(self.set_position)

        hboxLayout = QHBoxLayout()
        hboxLayout.setContentsMargins(0, 0, 0, 0)

        hboxLayout.addWidget(self.openBtn)
        hboxLayout.addWidget(self.playBtn)
        hboxLayout.addWidget(self.slider)


        vboxLayout = QVBoxLayout()
        vboxLayout.addWidget(videowidget)
        vboxLayout.addLayout(hboxLayout)
        self.playBox.setLayout(vboxLayout)

        self.mediaPlayer.setVideoOutput(videowidget)


        self.mediaPlayer.stateChanged.connect(self.mediastate_changed)
        self.mediaPlayer.positionChanged.connect(self.position_changed)
        self.mediaPlayer.durationChanged.connect(self.duration_changed)



    def open_file(self):
        filename, _ = QFileDialog.getOpenFileName(self, "Open Video")

        if filename != '':
            self.mediaPlayer.setMedia(QMediaContent(QUrl.fromLocalFile(filename)))
            self.playBtn.setEnabled(True)

    def play_video(self):
        if self.mediaPlayer.state() == QMediaPlayer.PlayingState:
            self.mediaPlayer.pause()

        else:
            self.mediaPlayer.play()

    def mediastate_changed(self):
        if self.mediaPlayer.state() == QMediaPlayer.PlayingState:
            self.playBtn.setIcon(
                self.style().standardIcon(QStyle.SP_MediaPause))

        else:
            self.playBtn.setIcon(
                self.style().standardIcon(QStyle.SP_MediaPlay))

    def position_changed(self, position):
        self.slider.setValue(position)

    def duration_changed(self, duration):
        self.slider.setRange(0, duration)

    def set_position(self, position):
        self.mediaPlayer.setPosition(position)

    def handle_errors(self):
        self.playBtn.setEnabled(False)
        self.label.setText("Error: " + self.mediaPlayer.errorString())


if __name__ == "__main__":
    app = QApplication(sys.argv)
    window = PlaybackWindow()
    window.show()
    sys.exit(app.exec_())

0 个答案:

没有答案