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?
Barrierefreie Anwendungen erstellen mit Qt
-
- User
- Beiträge: 90
- Registriert: Dienstag 19. Mai 2020, 19:17
- Wohnort: Dußlingen
- Kontaktdaten:
-
- User
- Beiträge: 90
- Registriert: Dienstag 19. Mai 2020, 19:17
- Wohnort: Dußlingen
- Kontaktdaten:
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.
Wenn ich es geschafft habe, dass ich Qt unter Windows 10 installieren kann, dann kann ich auch in der Dokumentation nachschauen.
- __blackjack__
- User
- Beiträge: 13533
- Registriert: Samstag 2. Juni 2018, 10:21
- Wohnort: 127.0.0.1
- Kontaktdaten:
@PythonMarlem: Die Qt-Dokumentation gibt es auch online zum Lesen.
Code: Alles auswählen
- (void)countSheep {
unsigned int sheep = 0;
while ( ! [self isAsleep]) { ++sheep; }
}
-
- User
- Beiträge: 90
- Registriert: Dienstag 19. Mai 2020, 19:17
- Wohnort: Dußlingen
- Kontaktdaten:
Schön, aber wenn ich im ersten Posting schreibe, dass ich gerade Python lerne, weiß ich das nicht! Aber ich suche sie jetzt!
-
- User
- Beiträge: 90
- Registriert: Dienstag 19. Mai 2020, 19:17
- Wohnort: Dußlingen
- Kontaktdaten:
Dieser Link ist nicht wirklich hilfreich:
https://doc.qt.io/qtforpython/PySide2/Q ... escription
https://doc.qt.io/qtforpython/PySide2/Q ... escription
- __blackjack__
- User
- Beiträge: 13533
- Registriert: Samstag 2. Juni 2018, 10:21
- Wohnort: 127.0.0.1
- Kontaktdaten:
@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“.
Code: Alles auswählen
- (void)countSheep {
unsigned int sheep = 0;
while ( ! [self isAsleep]) { ++sheep; }
}
-
- User
- Beiträge: 90
- Registriert: Dienstag 19. Mai 2020, 19:17
- Wohnort: Dußlingen
- Kontaktdaten:
ist die hier richtig: https://doc.qt.io/qt-5/classes.html
Ja. Wobei hier die speziell fur Accessibility ist: https://doc.qt.io/qt-5/accessible.html
-
- User
- Beiträge: 90
- Registriert: Dienstag 19. Mai 2020, 19:17
- Wohnort: Dußlingen
- Kontaktdaten:
Vielen Dank! sieht sehr gut aus!
-
- User
- Beiträge: 90
- Registriert: Dienstag 19. Mai 2020, 19:17
- Wohnort: Dußlingen
- Kontaktdaten:
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:
Folgender Code funktioniert unter Windows 10 mit dem kostenlosen Screenreader http://nvda.bhvd.de/
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_()
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_()
- __blackjack__
- User
- Beiträge: 13533
- Registriert: Samstag 2. Juni 2018, 10:21
- Wohnort: 127.0.0.1
- Kontaktdaten:
@PythonMarlem: Muss das denn überhaupt ein Bug sein? Ist vielleicht auch einfach nur ein Unterschied in den Screenreadern. Eventuell sogar konfigurierbar.
Code: Alles auswählen
- (void)countSheep {
unsigned int sheep = 0;
while ( ! [self isAsleep]) { ++sheep; }
}
-
- User
- Beiträge: 90
- Registriert: Dienstag 19. Mai 2020, 19:17
- Wohnort: Dußlingen
- Kontaktdaten:
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.
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.
-
- User
- Beiträge: 90
- Registriert: Dienstag 19. Mai 2020, 19:17
- Wohnort: Dußlingen
- Kontaktdaten:
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!
Liest der Screenreader Jaws nicht, obwohl AccessibleDescription die richtige Eigenschaft ist.
Liest der Screenreader Jaws obwohl diese Eigenschaft AccessibleName nicht dafür vorgesehen ist!
https://support.freedomscientific.com/Downloads/JAWS
Genau das gleiche!
Code: Alles auswählen
vButtonWindows.setAccessibleDescription("Es wird ein Hallo Windows auf der Console ausgeben")
Code: Alles auswählen
vButtonWindows.setAccessibleName("Es wird ein Hallo Windows auf der Console ausgeben")
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".
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".
-
- User
- Beiträge: 90
- Registriert: Dienstag 19. Mai 2020, 19:17
- Wohnort: Dußlingen
- Kontaktdaten:
Das Entscheidende kommt danach:
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.The description is primarily used to provide greater context for vision-impaired users, but is also used for context searching or other applications.
-
- User
- Beiträge: 90
- Registriert: Dienstag 19. Mai 2020, 19:17
- Wohnort: Dußlingen
- Kontaktdaten:
Folgender Code:
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!
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_()
Wenn Ihr als Python-Experten sagt, dass das eine gute Lösung ist, dann lasse ich es jetzt auf sich beruhen!
-
- User
- Beiträge: 90
- Registriert: Dienstag 19. Mai 2020, 19:17
- Wohnort: Dußlingen
- Kontaktdaten:
Hier: https://doc.qt.io/qt-5/qwidget.html#acc ... ption-prop
Die Definition bestätigt meine Behauptung.
Die Definition bestätigt meine Behauptung.