Kapitel 28
Benutzungsoberflächen mit Qt
770
Das Bild der Weltkugel ist eine kleine PNG-Bilddatei, die in diesem Fall im gleichen Ordner
wie das Programm gespeichert ist.
Erläuterung:
#1: Die Klasse Window ist von der Basisklasse QWidget abgeleitet. Sie stellt ein Widget ohne
Eltern (also ohne übergeordnetes Widget) dar und modelliert das Anwendungsfenster.
#2: Hier wird die Initialisierungsmethode der übergeordneten Klasse (Basisklasse) QWidget
aufgerufen. Die Funktion super() liefert das Klassenobjekt QWidget. Sie hätten also auch
QWidget.__init__(self) schreiben können.
#3: Im gleichen Verzeichnis, in dem Python-Datei gespeichert ist, befindet sich die Bilddatei
welt.png. Durch einen Aufruf des Konstruktors QIcon() wird ein QIcon-Objekt erzeugt.
Das Argument ist ein String mit dem Pfad zur Bilddatei (hier nur der Dateiname). Mit der
Methode
setWindowIcon() wird das Icon in die linke obere Ecke des Rahmens gesetzt. Es
taucht dann übrigens auch in untergeordneten Fenstern (z.B. Messageboxen) auf.
#4: Das Anwendungsfenster sorgt selbst dafür, dass es sichtbar gemacht wird.
#5: Ein Objekt der neuen Klasse Window wird erzeugt und erscheint sofort auf dem Bild-
schirm.
28.4 Ein Webbrowser
In diesem Projekt entwickeln Sie einen kleinen Webbrowser und erfahren in diesem
Zusammenhang, wie man mit PyQt5 die drei Schritte der Gestaltung einer Benutzungs-
oberfläche umsetzt:
Definition von Widgets (hier: Eingabezeile, Schaltfläche, View-Fenster)
Layout, d.h. die Anordnung der Widgets im Applikationsfenster
Verknüpfung interaktiver Widgets (z.B. Schaltfläche) oder Tastatur-Events mit Methoden
# welt_browser.pyw
import sys
from PyQt5.QtWidgets import QApplication, QWidget
from PyQt5.QtGui import QIcon
class Window(QWidget): #1
def __init__(self):
super().__init__() #2
self.resize(250, 100)
self.setWindowTitle('Welt-Browser')
self.setWindowIcon(QIcon("welt.png")) #3
self.show() #4
app = QApplication(sys.argv)
w = Window() #5
sys.exit(app.exec_())
771
28.4
Ein Webbrowser
Abb. 28.3: Ein Webbrowser mit Eingabezeile für Adressen, Schaltfläche und Browserfenster
Skript:
# browser.pyw
import sys
from PyQt5.QtCore import *
from PyQt5.QtGui import *
from PyQt5.QtWidgets import *
from PyQt5.QtWebKit import *
from PyQt5.QtWebKitWidgets import *
class Browser(QWidget):
def __init__(self):
super().__init__()
self.setWindowTitle("Welt-Browser") #1
# Widgets #2
self.setWindowIcon(QIcon("welt.png"))
self.webView = QWebView(self) #3
self.addressBar = QLineEdit(self) #4
self.searchButton=QPushButton("Suchen", self) #5
Kapitel 28
Benutzungsoberflächen mit Qt
772
Erläuterung:
#1: Zuerst wird dem Anwendungsfenster der Titel Welt-Browser zugewiesen, der im obe-
ren Rand des Fensters angezeigt wird.
#2: In diesem Abschnitt werden alle Widget-Objekte definiert.
#3: Hier wird ein QWebView-Objekt erzeugt, das eine Webseite (HTML-Dokument) interpre-
tiert und anzeigt. Das Argument
self bewirkt, dass dieses Widget dem Anwendungsfenster
(Objekt der Klasse
Browser) untergeordnet wird. Es ist ein »Kind« (child) des »Eltern«-Wid-
gets (parent).
#4: Eine Eingabezeile (zur Eingabe eines URL) wird erzeugt. Mit dem Argument self wird
dieses Widget ein Kind (child) des Anwendungsfensters.
#5: Eine Schaltfläche mit Aufschrift SUCHEN wird erzeugt. Auch dieses Widget ist ein Kind
des Anwendungsfensters.
#6: Die lokale Variable hbl ist ein horizontales Box-Layout. Ein solches Layout-Objekt kann
man sich als Zeile eines Setzkastens vorstellen.
# Layout
hbl = QHBoxLayout() #6
hbl.addWidget(self.addressBar) #7
hbl.addWidget(self.searchButton)
vbl = QVBoxLayout() #8
vbl.addLayout(hbl)
vbl.addWidget(self.webView)
self.setLayout(vbl) #9
# Connections
self.addressBar.returnPressed.connect(self.search)
self.searchButton.clicked.connect(self.search) #10
self.show()
def search(self):
# Zeige Webseite mit angegebener Adresse
address = str(self.addressBar.text()) #11
if address: #12
if "://" not in address:
address = "http://" + address #13
url = QUrl(address) #14
self.webView.load(url) #15
app = QApplication(sys.argv)
browser = Browser()
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.