我正在制作一个 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_())