825
29.4
Videoplayer
#6: Ein neues QPainter-Objekt wird erzeugt. Mit einem QPainter-Objekt kann man ein
Bild bearbeiten, z.B. mit einer Aufschrift versehen. Man kann es sich als ein sehr komfor-
tables Zeichengerät vorstellen.
#7: Das QPainter-Objekt wird mit dem QPixmap-Objekt (Foto) verbunden. Ab jetzt werden
alle Zeichenoperationen auf dem
QPixmap-Objekt ausgeführt.
#8:r das QPainter-Objekt werden Farbe und Schrifttyp eingestellt.
#9: Ein Text wird an eine bestimmte Stelle (in der Mitte oben) auf das Bild gesetzt. Im ersten
Argument wird ein (unsichtbares) Rechteck definiert. Dabei werden die Koordinaten der lin-
ken oberen Ecke
(0, 0) und der rechten unteren Ecke (self.label.width(), 160) ange-
geben. Das Rechteck ist also genauso breit wie das Label, auf dem das Foto dargestellt wird.
Das zweite Argument
Qt.AlignCenter legt fest, dass der Text genau in die Mitte dieses
unsichtbaren Rechtecks platziert wird.
#10: Hier wird die Zeichenaktivität des QPainter-Objektes beendet.
#11: Das bearbeitete Bild (Foto und Text) wird auf das Label gesetzt und auf diese Weise
sichtbar gemacht.
#12: Das Label passt sich an die Größe des Bildes an und anschließend passt sich auch das
Anwendungsfenster an die Labelgröße an.
#13: Die Anweisung bewirkt, dass eine Dialogbox zur Eingabe eines (einzeiligen) Textes
erscheint. Zurückgegeben wird ein Tupel, bestehend aus dem eingegebenen Text und
einem Wahrheitswert, der signalisiert, ob der Text in Ordnung ist. Die drei Argumente sind
1) das Widget, das das Eltern-Widget der Dialogbox sein soll (hier das Applikationsfenster
selbst), 2) der Titel des Dialogfensters, 3) ein Hinweis, der in der Dialogbox über dem Ein-
gabefeld steht.
#14: Wenn der eingegebene Text in Ordnung ist, wird er im Attribut self.text gespeichert.
Der Eventhandler
paintEvent() sorgt automatisch dafür, dass das Bild auf dem Label aktu-
alisiert und der Text sichtbar wird.
29.4 Videoplayer
In diesem Abschnitt lernen Sie einige Widgets und Programmiertechniken kennen, mit
denen Sie die Applikationen zur Wiedergabe von Medien gestalten können:
Widgets zur Wiedergabe von Medien und Playlists
Widgets einblenden, ausblenden, aktivieren und deaktivieren
GUI-Gestaltung mit Frames, in denen Widgets zusammengefasst werden
Regeln zur Veränderung der Widget-Größe (Size Policy) festlegen
Reaktionen auf Mausbewegungen oder Veränderungen der Fenstergröße definieren
29.4.1 Ein einfacher Videoplayer
Im ersten Projekt entwickeln Sie einen einfachen Videoplayer – eine Basisapplikation, an
die später immer wieder angeknüpft wird. Mit diesem Videoplayer können Sie eine mp4-
Videodatei laden und wiedergeben. Die Lautstärke wird mit einem Schieberegler eingestellt.
Zu Beginn ist die Schaltfläche S
TART, mit der ein Video abgespielt wird, grau und kann nicht
Kapitel 29
Multimediaanwendungen mit Qt
826
angeklickt werden. Sie ist deaktiviert; denn es muss natürlich zuerst ein Video geladen wer-
den, bevor man etwas abspielen kann. Dieselbe Schaltfläche wird auch zum Anhalten des
Videos verwendet. Nach dem ersten Anklicken ändert sich die Aufschrift und heißt nun
P
AUSE.
Abb. 29.11: Das Anwendungsfenster eines einfachen Videoplayers. Die linke Schaltfläche hat
zwei Funktionen.
Klickt man auf die zweite Schaltfläche WÄHLE VIDEO, öffnet sich eine Dialogbox, in der eine
Datei ausgewählt werden kann. Sobald der Film geladen ist, kann er gestartet werden.
Skript:
#! /python34/pythonw.exe
# videoplayer.pyw
from PyQt5.QtWidgets import *
from PyQt5.QtMultimedia import (QMediaPlayer,
QMediaContent)
from PyQt5.QtMultimediaWidgets import QVideoWidget
from PyQt5.QtCore import *
import sys
class Window(QWidget): #1
def __init__(self):
super().__init__()
self.createWidgets()
self.createLayout()
self.show()
def createWidgets(self):
self.setWindowTitle("Videoplayer") #2
self.videoWidget = QVideoWidget(self) #3
self.videoWidget.setMinimumSize(320,180) #4
827
29.4
Videoplayer
self.player = QMediaPlayer(self) #5
self.player.setVideoOutput(self.videoWidget) #6
self.player.setVolume(0) #7
self.playButton = QPushButton("Start") #8
self.playButton.clicked.connect(self.play)
self.playButton.setEnabled(False) #9
self.selectButton = QPushButton("Wähle Video")
self.selectButton.clicked.connect(self.selectFile)
self.volumeSlider = QSlider(Qt.Horizontal) #10
self.volumeSlider.sliderMoved.connect(
self.player.setVolume)
self.volumeSlider.setRange(0, 100) #11
def createLayout(self): #12
vBox = QVBoxLayout()
vBox.addWidget(self.videoWidget)
hBox = QHBoxLayout()
hBox.addWidget(self.playButton)
hBox.addWidget(self.selectButton)
hBox.addWidget(self.volumeSlider)
vBox.addLayout(hBox)
self.setLayout(vBox)
def play (self): #13
if self.playButton.text() == "Start": #14
self.player.play()
self.playButton.setText("Pause")
else:
self.player.pause() #15
self.playButton.setText("Start")
def selectFile(self): #16
fileName, _ = QFileDialog.getOpenFileName(self,
"Video öffnen")
self.media = QMediaContent(QUrl(filename)) #17
self.player.setMedia(self.media) #18
self.playButton.setEnabled(True) #19
app = QApplication(sys.argv)
window = Window()
sys.exit(app.exec_())

Get Python 3 - Lernen und professionell anwenden now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.