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!
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 muss 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
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 muss 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()
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
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 bis zum Schreiben dieses Blogartikels nicht geklappt hat:
Barrierefreie Software zu entwickeln die auf allen Betriebssystemen genutzt werden kann. Im Fachchinesisch: plattformunabhängige, barrierefreie Softwareentwicklung.
Ich bin Python-Fan geworden!
Bei Fragen, rufen Sie mich an 07072/1278463 oder schreiben eine Mail info@marlem-software.de .