Barrierefreie, plattformunabhängige Softwareentwicklung mit Python und Qt

In diesem Blogartikel erkläre ich, wie mit der Programmiersprache Python und dem GUI-Framework Qt barrierefreie Softwareentwicklung verwirklicht werden kann, die auf alle Betriebssysteme funktioniert.

Warum habe ich die Programmiersprache Python gelernt
Python ist eine Programmiersprache welche üblicherweise interpretiert wird. Python ist plattformunabhängig, das bedeutet, Python-Programme laufen auf allen Betriebssystemen.
Python ist in der Rangliste der Programmiersprachen im 1. Quartal 2020 auf Platz 2.
Python schreibt Geschichte: Platz 2 im Programmiersprachen-Ranking
Ich habe während eines Udemy-Kurses entdeckt, dass das GUI-Framework Qt die vorraussetzungen hat, um screenreadertaugliche Programmoberflächen zu entwickeln.
Das bedeutet mit der Programmiersprache Python und dem GUI-Framework Qt kann plattformunabhängige, barrierefreie Softwareentwicklung umgesetzt werden.

Barrierefreie Softwareentwicklung – Definition

Barrierefreie Softwareentwicklung bedeutet, dass Software so entwickelt wird, dass sie von allen Menschen, auch von Menschen mit körperlichen Einschränkungen oder Behinderungen, bedient werden kann.

Plattformunabhängigkeit bei barrierefreie Softwareentwicklung getestet unter Windows 10, Ubuntu 20.04 und MacOS 10.15

Ich habe ein Demo-Programm mit Python und Qt entwickelt und habe es unter Windows 10, Ubuntu 20.04 und MacOS 10.15 getestet. Entwickelt wurde das Programm mit Python 3.7.6 und Qt unter Windows 10.
Unter Ubuntu 20.04 war Python 3.8.2 vorinstalliert. Qt musste unter Ubuntu noch installiert werden. Mein Python-Programm hat unter Windows 10 und unter Ubuntu 20.04 sich komplett identisch verhalten.
In Sachen Screenreader-Test gab es unter Windows 10 ein merkwürdiges Verhalten.
Die Qt-Oberflächenkomponenten haben wie die Oberflächenkomponenten von Java und C# die Eigenschaften AccessibleName und AccessibleDescription. Von Java und C# war ich es gewohnt, dass die Beschreibungstexte der Bedienelemente in der Eigenschaft AccessibleDescription hinterlegt werden, welche von den Screenreadern  vorgelesen werden.
Unter Windows 10 haben die Screenreader NVDA und Jaws den Beschreibungstext der Eigenschaft AccessibleName vorgelesen. Unter Ubuntu 20.04 hat der Screenreader Orca, welcher in den Zugangshilfen von Ubuntu zu finden ist, den Beschreibungstext in der Eigenschaft AccessibleDescription vorgelesen. Deswegen habe ich bei meiner Demo-Anwendung die Beschreibungstexte für Screenreader in der Eigenschaft AccessibleName hinterlegt. Die Eigenschaft AccessibleName wird von NVDA und Jaws unter Windows, von Orca unter Ubuntu und von Voice Over unter MacOS vorgelesen.
Um nochmal deutlich zu machen warum ich diesen Blogartikel schreibe, mit der Programmiersprache Python und dem GUI-Framework Qt kann barrierefreie Software entwickelt werden, die auf alle Betriebssysteme genutzt werden kann. Für jemand wie mich, ist dass die Erfüllung eines Lebenstraums!

Demoprogramm: für blinde und sehbehinderte Menschen nutzbar, Betriebssystem Windows, Programmiersprache Python
Demoprogramm: für blinde und sehbehinderte Menschen nutzbar, Betriebssystem Windows, Programmiersprache Python

Was ist ein Screenreader?

Ein Screenreader ist eine Software die den Bildschirminhalt vorliest. Blinde, aber auch viele Menschen mit Sehbehinderung nutzen einen Screenreader, damit sie wissen was auf dem Bildschirm oder Display passiert. Screenreader gibt es auf Computer, Smartphones und Tablets.
Das Lesen der Informationen auf dem Bildschirm können dabei auf zwei verschiedene Arten geschehen:

    • Akustisch: über eine Soundkarte
    • Taktil: über eine Braillezeile

Hier eine Liste der wichtigsten Screenreader.

Name des Screenreaders Name des Betriebssystems
Sprachausgabe Windows 10
Talkback Android
VoiceOver IOS
Orca Ubuntu
NVDA Windows
Jaws Windows

Die Situation von blinden Menschen bei der Bedienung von Software

Blinde Menschen können nur Programme bzw. Software bedienen die Screenreadertauglich ist. Das bedeutet, alle Bedienelemente, Bilder oder Grafiken einer Programmoberfläche benötigen eine Beschreibung in Form eines Textes. Bei Bedienelementen muß der Text die Funktion bzw. den Sinn des Bedienelementes erklären. Bei Bilder oder Grafiken muss der Text den Inhalt des Bildes bzw. der Grafik beschreiben.
Aber nun ein konkretes Beispiel:
Menschen die sehen können und ein E-Mailprogramm suchen, welches für sie gut zu bedienen ist, können 10 verschiedene E-Mailprogramme testen.
Blinde Menschen müssen erst herausfinden ob das E-Mailprogramm dass sie testen möchten so programmiert wurde, dass der Screenreader den sie nutzen, die Programmoberfläche lesen kann. Programme die für Screenreader keine Textinformation bereit stellen, können blinde Menschen nicht bedienen.
Das ist eine erhebliche Einschränkung. Diese Einschränkung möchte ich beseitigen. Deswegen erkläre ich in diesem Blogartikel wie Python-Programme barrierefrei entwickelt werden können.

Barrierefreie Softwareentwicklung, plattformunabhängig mit Python und Qt

Folgende Punkte müssen umgesetzt werden bei barrierefreie Softwareentwicklung mit Python und Qt:

    • Mit Python und Qt screenreadertaugliche Anwendungen entwickeln
    • Tastaturbedienbarkeit
    • Visuelle und programmgesteuerte Anzeige der Position des Tastaturfokus
    • Einstellungen des Betriebssystems mit Python und Qt übernehmen
Demoprogramm: für blinde und sehbehinderte Menschen nutzbar, Betriebssystem Ubuntu, Programmiersprache Python
Demoprogramm: für blinde und sehbehinderte Menschen nutzbar, Betriebssystem Ubuntu, Programmiersprache Python

Mit Python und Qt screenreadertaugliche Anwendungen entwickeln

Um Python-Programme screenreadertauglich zu machen, müssen den Bedienelementen Texte hinterlegt werden die den Sinn des Bedienelements erklären. Da wie oben schon erwähnt, die Eigenschaft AccessibleDescription von den Windows Screenreadern nicht ausgelesen wird muß die Eigenschaft AccessibleName genutzt werden.

Codebeispiel:


self.button_betriebssystem.setAccessibleName("Der Name des Betriebssystems wird ausgegeben")
self.button_anwender.setAccessibleName("Der Anwender wird begrüßt")
self.edit_vor_nachname.setAccessibleName("Geben Sie bitte Vor-und Nachname ein")
self.programm_beenden.setAccessibleName("Programm wird beendet")

Damit ein Screenreader weiß, dass eine Beschriftung zu einem bestimmten Eingabefeld gehört, müssen beide miteinander verknüpft werden. Folgender Code zeigt wie es geht.

Codebeispiel:


self.label_vor_nachname.setBuddy(self.edit_vor_nachname)

Tastaturbedienbarkeit

Blinde Menschen können keine Computermaus bedienen. Warum? Versuchen Sie, lieber Blogleser, die Augen zu schließen und den Mauszeiger ganz gezielt an eine bestimmte Position auf dem Bildschirm zu bewegen. Das funktioniert nicht. Deswegen müssen blinde Menschen den ganzen Computer per Tastatur bedienen. Das bedeutet für eine Software, dass alle Bedienelemente per Tabulatortaste erreichbar sein müssen.
Außerdem ist es Hilfreich, dass wichtige Menüs und Schalter ein Tastenkürzel haben. Folgender Code zeigt wie einem Schalter ein Tastaturkürzel hinzugefügt wird.

Codebeispiel:


self.button_anwender = QPushButton("Hallo &Anwender", self)

Das &-Zeichen sorgt dafür, dass der Pushbutton mit der Tastenkombination Alt+a den Tastaturfokus bekommt.
Damit ein Eingabefeld per Tastaturkürzel angesteuert werden kann benötigt die Beschriftung des Eingabefeldes ein Tastenkürzel und die Beschriftung muss mit dem Eingabefeld verknüpft werden.

Codebeispiel:


self.label_vor_nachname = QLabel("&Vor-und Nachname:", self)
self.edit_vor_nachname = QLineEdit(self)
self.label_vor_nachname.setBuddy(self.edit_vor_nachname)

Das &-Zeichen sorgt dafür, dass der Label mit Alt+v den Tastaturfokus bekommt. Dadurch dass der Label mit setBuddy mit dem Eingabefeld edit_vor_nachname verknüpft ist, bekommt beim drücken von Alt+v das Eingabefeld für Vor-und Nachname den Fokus.

Visuelle und programmgesteuerte Anzeige der Position des Tastaturfokus

Menschen mit einer Sehbehinderung haben oft Probleme zu erkennen welches Bedienelement gerade den Tastaturfokus hat. Bei Eingabefeldern ist der Textcursor oft ein schmaler senkrechter Strich. Für Menschen mit einer Sehbehinderung ist solch ein Textcursor ganz schwer zu erkennen. Deswegen macht es Sinn, dem Bedienelement welches den Tastaturfokus hat, eine gelbe Hintergrundfarbe zugeben. Mit der Programmiersprache Python geht das wie folgt.

Codebeispiel:


def main():
    app = QtWidgets.QApplication([])
    # 3. Visuelle und programmgesteuerte Anzeige der Position des Tastaturfokus
    app.setStyleSheet("""
    QPushButton:focus { background-color: yellow }
    QLineEdit:focus { background-color: yellow }
    """);
    win = MainWindow()
    win.showNormal()
    app.exec_()
if __name__ == '__main__':
    main()
Demoprogramm: für blinde und sehbehinderte Menschen nutzbar, Betriebssystem MacOS, Programmiersprache Python
Demoprogramm: für blinde und sehbehinderte Menschen nutzbar, Betriebssystem MacOS, Programmiersprache Python

Einstellungen des Betriebssystems mit Python Qt übernehmen

Alle Recherchen haben nichts genutzt. Einstellungen des Betriebssystems übernehmen geht mit Python Qt nicht.
In diesem Artikel erkläre ich wie Sie dieses Problem lösen können:

Schriftgröße der Anwendung anpassen

Wenn ein Mensch mit Sehbehinderung im Betriebssystem eine große Systemschrift eingestellt hat, kann Python Qt diese nicht übernehmen.
Es ist aber möglich ein Python-Programm so zu entwickeln, dass die Schriftgröße der Anwendung beim Programmstart angegeben wird. Folgender Code zeigt wie es geht:


def AppSchriftSetzen(appv,fontsize):
    font = appv.font()
    font.setPointSize(font.pointSize() * fontsize)
    appv.setFont(font)

...

 win = MainWindow()
    if len(sys.argv) >= 2:
        AppSchriftSetzen(app, int(sys.argv[1]))
    else:
      AppSchriftSetzen(app, 0);
    win.showNormal()
    app.exec_()

if __name__ == '__main__':
    main()

Beispiel eines Programmstartes mit Großer Schriftgröße:

C:\Projekte\Python\PyQTBarrierefrei\venv\Scripts\python.exe C:/Projekte/Python/PyQTBarrierefrei/Barrierefrei.py 2

Demoprogramm: für blinde und sehbehinderte Menschen nutzbar, Betriebssystem Windows, Programmiersprache Python mit großer Schrift für Menschen mit Sehbehinderung
Demoprogramm: für blinde und sehbehinderte Menschen nutzbar, Betriebssystem Windows, Programmiersprache Python mit großer Schrift für sehbehinderte Menschen

Einstellungen des Betriebssystems übernehmen

Geht leider nicht. In diesem Artikel erkläre ich wie Sie dieses Problem lösen können:

Schlussbemerkung

Mit der Programmiersprache Python habe das erreicht, was bei der Programmiersprache Java nie geklappt hat:
Barrierefreie Software zu entwickeln die auf allen Betriebssystemen genutzt werden kann.
Ich bin Python-Fan geworden!

Bei Fragen, rufen Sie mich an 07072/1278463 oder schreiben eine Mail info@marlem-software.de .


Autor: Markus Lemcke

Ich bin Markus Lemcke, Softwareentwickler, Webentwickler, Berater und Dozent für barrierefreies Webdesign, barrierefreie Softwareentwicklung mit Java + C#, Barrierefreiheit bei den Betriebssystemen Windows, Android, IOS und Ubuntu.

Schreibe einen Kommentar