Seite 1 von 3

Barrierefreie Anwendungen erstellen mit Qt

Verfasst: Mittwoch 20. Mai 2020, 10:18
von PythonMarlem
Hallo,

in einem Lernvideo habe ich gesehen, dass Qt-Oberflächenkomponenten
die Eigenschaften "AccessibleName" und "AccessibleDescription" haben.
Das deutet darauf hin dass eine Qt-Anwendungen screenreadertauglich
entwickelt werden kann. In den Programmiersprachen Java und C# heißen
die Eigenschaften genauso.

Frage:
Gibt es dazu Dokumentation?

Re: Barrierefreie Anwendungen erstellen mit Qt

Verfasst: Mittwoch 20. Mai 2020, 10:24
von sparrow
Warum schaust du nicht mal in die Qt-Dokumentation?

Re: Barrierefreie Anwendungen erstellen mit Qt

Verfasst: Mittwoch 20. Mai 2020, 11:38
von PythonMarlem
weil meine erste Frage in diesem Forum bezieht sich auf Installation von Qt unter Windows 10.
Wenn ich es geschafft habe, dass ich Qt unter Windows 10 installieren kann, dann kann ich auch in der Dokumentation nachschauen.

Re: Barrierefreie Anwendungen erstellen mit Qt

Verfasst: Mittwoch 20. Mai 2020, 11:40
von __blackjack__
@PythonMarlem: Die Qt-Dokumentation gibt es auch online zum Lesen.

Re: Barrierefreie Anwendungen erstellen mit Qt

Verfasst: Mittwoch 20. Mai 2020, 11:59
von PythonMarlem
Schön, aber wenn ich im ersten Posting schreibe, dass ich gerade Python lerne, weiß ich das nicht! Aber ich suche sie jetzt!

Re: Barrierefreie Anwendungen erstellen mit Qt

Verfasst: Mittwoch 20. Mai 2020, 12:11
von PythonMarlem
Dieser Link ist nicht wirklich hilfreich:
https://doc.qt.io/qtforpython/PySide2/Q ... escription

Re: Barrierefreie Anwendungen erstellen mit Qt

Verfasst: Mittwoch 20. Mai 2020, 12:22
von __blackjack__
@PythonMarlem: Nimm die Qt-Dokumentation. Also die für C++, nicht die für Python/PySide2. Und da dann am besten nicht nur die konkreten Methoden und Properties sondern auch mal die Übersichtsdokumentationen zu den verschiedenen Themen wie „Accessibility“.

Re: Barrierefreie Anwendungen erstellen mit Qt

Verfasst: Donnerstag 21. Mai 2020, 21:06
von PythonMarlem

Re: Barrierefreie Anwendungen erstellen mit Qt

Verfasst: Donnerstag 21. Mai 2020, 21:12
von __deets__
Ja. Wobei hier die speziell fur Accessibility ist: https://doc.qt.io/qt-5/accessible.html

Re: Barrierefreie Anwendungen erstellen mit Qt

Verfasst: Freitag 22. Mai 2020, 05:29
von PythonMarlem
Vielen Dank! sieht sehr gut aus!

Re: Barrierefreie Anwendungen erstellen mit Qt

Verfasst: Donnerstag 28. Mai 2020, 12:20
von PythonMarlem
Hallo,

der Grund warum ich in die Irre gelaufen bin ist, dass es unter Windows einen Bug gibt. Ob der Bug bei Qt oder beim Screenreader NVDA ist muss ich noch herausfinden.

Folgender Code funktioniert unter Ubuntu 20.04 mit dem Screenreader Orca der in Ubuntu in den Zugangshilfen zu finden ist:

Code: Alles auswählen

#!/usr/bin/env python3
import sys
from PyQt5 import QtCore, QtWidgets
from PyQt5.QtWidgets import *
from PyQt5.QtCore import QSize

class MyWindow(QMainWindow):
    def __init__(self):
        # Konstruktor von QMainWindow aufrufen
        super().__init__()

        # Fenstergröße und Titel einstellen
        self.setMinimumSize(QSize(300, 100))
        self.setWindowTitle('Barrierefreiheit mit Qt')

        def sag_HalloWindows():
            print("Hallo Windows!")

        def sag_HalloUbuntu():
            print("Hallo Ubuntu!")

        vButtonWindows = QPushButton("Hallo Windows",self)
        vButtonWindows.setGeometry(0,0,80,30)
        vButtonWindows.setAccessibleDescription("Es wird ein Hallo Windows auf der Console ausgeben")
        vButtonWindows.clicked.connect(sag_HalloWindows)
        vButtonWindows.show()

        vButtonUbuntu = QPushButton("Hallo Ubuntu!",self)
        vButtonUbuntu.setGeometry(0, 50,80,30)
        vButtonUbuntu.setAccessibleDescription("Es wird ein Hallo Ubuntu auf der Console ausgeben")
        vButtonUbuntu.clicked.connect(sag_HalloUbuntu)
        vButtonUbuntu.show()

app = QtWidgets.QApplication([])
win = MyWindow()
win.show()
app.exec_()
Folgender Code funktioniert unter Windows 10 mit dem kostenlosen Screenreader http://nvda.bhvd.de/

Code: Alles auswählen

#!/usr/bin/env python3
import sys
from PyQt5 import QtCore, QtWidgets
from PyQt5.QtWidgets import *
from PyQt5.QtCore import QSize

class MyWindow(QMainWindow):
    def __init__(self):
        # Konstruktor von QMainWindow aufrufen
        super().__init__()

        # Fenstergröße und Titel einstellen
        self.setMinimumSize(QSize(300, 100))
        self.setWindowTitle('Barrierefreiheit mit Qt')

        def sag_HalloWindows():
            print("Hallo Windows!")

        def sag_HalloUbuntu():
            print("Hallo Ubuntu!")

        vButtonWindows = QPushButton("Hallo Windows",self)
        vButtonWindows.setGeometry(0,0,80,30)
        vButtonWindows.setAccessibleName("Es wird ein Hallo Windows auf der Console ausgeben")
        vButtonWindows.clicked.connect(sag_HalloWindows)
        vButtonWindows.show()

        vButtonUbuntu = QPushButton("Hallo Ubuntu!",self)
        vButtonUbuntu.setGeometry(0, 50,80,30)
        vButtonUbuntu.setAccessibleName("Es wird ein Hallo Ubuntu auf der Console ausgeben")
        vButtonUbuntu.clicked.connect(sag_HalloUbuntu)
        vButtonUbuntu.show()

app = QtWidgets.QApplication([])
win = MyWindow()
win.show()
app.exec_()

Re: Barrierefreie Anwendungen erstellen mit Qt

Verfasst: Donnerstag 28. Mai 2020, 13:32
von __blackjack__
@PythonMarlem: Muss das denn überhaupt ein Bug sein? Ist vielleicht auch einfach nur ein Unterschied in den Screenreadern. Eventuell sogar konfigurierbar.

Re: Barrierefreie Anwendungen erstellen mit Qt

Verfasst: Donnerstag 28. Mai 2020, 15:27
von PythonMarlem
Ja, es ist ein Bug!
Bei C# Winform, WPF und bei Java-Swing, JavaFX gibt es auch die Eigenschaften für Screenreader.
Hier ist klar geregelt dass wenn bei AccessibleDescription ein Text hinterlegt ist, wird der Text vom Screenreader gelesen.
Habe ich alles 4 getestet mit NVDA.

Aber um mein Problem nochmal zu konkretisieren:
Wenn ich in der Eigenschaft AccessibleDescription einen Text hinterleg für den Screenreader, dann ist die Python-Anwendung für Windows-Nutzer die den Screenreader NVDA nutzen nicht bedienbar und für Ubuntu-Nutzer die den Screenreader Orca verwenden ist sie bedienbar.

Re: Barrierefreie Anwendungen erstellen mit Qt

Verfasst: Donnerstag 28. Mai 2020, 19:01
von PythonMarlem
Ich habe folgendes gemacht. Ich habe die Demo-Version von diesem Screenreader unter Windows 10 installiert:
https://support.freedomscientific.com/Downloads/JAWS

Genau das gleiche!

Code: Alles auswählen

vButtonWindows.setAccessibleDescription("Es wird ein Hallo Windows auf der Console ausgeben")
Liest der Screenreader Jaws nicht, obwohl AccessibleDescription die richtige Eigenschaft ist.

Code: Alles auswählen

vButtonWindows.setAccessibleName("Es wird ein Hallo Windows auf der Console ausgeben")
Liest der Screenreader Jaws obwohl diese Eigenschaft AccessibleName nicht dafür vorgesehen ist!

Re: Barrierefreie Anwendungen erstellen mit Qt

Verfasst: Donnerstag 28. Mai 2020, 19:54
von sparrow
Woher nimmst du die Information, wofür was vorgesehen ist?

Re: Barrierefreie Anwendungen erstellen mit Qt

Verfasst: Donnerstag 28. Mai 2020, 21:15
von sparrow
Die Informationen in der Qt Dokumentation sagen , dass in "Description" nur Informationen über das Aussehen des Widgets stehen sollen. Dann würden die Reader unter Windows funktionieren, wie sie sollen.

Gibt es denn irgendwo ein Dokument, was ein Screenreader auswerten muss? Irgend ein Standard? Und möchte ein Benutzer überhaupt immer eine lange Version hören?
"OK" in einem Dialog macht ja mehr Sinn als "Dieser Knopf bestätigt den Dialog mit der Antwort OK".

Re: Barrierefreie Anwendungen erstellen mit Qt

Verfasst: Freitag 29. Mai 2020, 18:34
von PythonMarlem
Das Entscheidende kommt danach:
The description is primarily used to provide greater context for vision-impaired users, but is also used for context searching or other applications.
Die Sache ist die, bei Java und C# heißen die Eigenschaften genau gleich und dort wird auch immer AccessibleDescription genutzt um ein Bedienelement zu beschreiben.

Re: Barrierefreie Anwendungen erstellen mit Qt

Verfasst: Freitag 29. Mai 2020, 18:38
von sparrow
Aber das aus anderen Sprachen und Tookits abzuleiten halte ich für schwierig.

Re: Barrierefreie Anwendungen erstellen mit Qt

Verfasst: Freitag 29. Mai 2020, 21:18
von PythonMarlem
Folgender Code:

Code: Alles auswählen

#*******************************************************************************
#*              Mit Python und Qt eine Screenreadertaugliche Anwendung         *
#*******************************************************************************

import os
import sys
from PyQt5 import QtCore, QtWidgets
from PyQt5.QtWidgets import *
from PyQt5.QtCore import QSize

class MyWindow(QMainWindow):
    def __init__(self):
        # Konstruktor von QMainWindow aufrufen
        super().__init__()

        # Fenstergröße und Titel einstellen
        self.setMinimumSize(QSize(300, 100))
        self.setWindowTitle('Barrierefreiheit mit Qt')
        self.setGeometry(50,50,300,100)

        def BetriebbsystemAbfragen():
            os_info = sys.platform
            print("Betriebssytem: " + os_info)

        def HalloAnwender():
            print("Hallo Markus!")

        vButtonBetriebssystem = QPushButton("Hallo Betriebssystem",self)
        vButtonBetriebssystem.setGeometry(20,0,130,30)
        vButtonBetriebssystem.setAccessibleName("Es wird ausgegeben wie das Betriebssystem heißt")
        vButtonBetriebssystem.setToolTip("Es wird ausgegeben wie das Betriebssystem heißt")
        vButtonBetriebssystem.clicked.connect(BetriebbsystemAbfragen)
        vButtonBetriebssystem.show()

        vButtonAnwender = QPushButton("Hallo Anwender",self)
        vButtonAnwender.setGeometry(20, 40, 130, 30)
        vButtonAnwender.setAccessibleName("Der Anwender wird begrüßt")
        vButtonAnwender.setToolTip("Der Anwender wird begrüßt")
        vButtonAnwender.clicked.connect(HalloAnwender)
        vButtonAnwender.show()

app = QtWidgets.QApplication([])
win = MyWindow()
win.show()
app.exec_()
Hat unter Windows 10 mit dem Screenreader NVDA funktioniert und unter Ubuntu mit dem Screenreader Orca.

Wenn Ihr als Python-Experten sagt, dass das eine gute Lösung ist, dann lasse ich es jetzt auf sich beruhen!

Re: Barrierefreie Anwendungen erstellen mit Qt

Verfasst: Samstag 30. Mai 2020, 21:07
von PythonMarlem
Hier: https://doc.qt.io/qt-5/qwidget.html#acc ... ption-prop

Die Definition bestätigt meine Behauptung.