Es gibt die Möglichkeit, im Qt Designer ein Label als Buddy eines TextEdit-Felds festzulegen. Nach den Beschreibungen, die ich fand, ist das sehr einfach, das Label hat ein »&« vor dem Buchstaben, der ls Kurzwahl dienen soll, im Editor stellt man die Verbindung zwischen Label und TextEdit her – fertig. Wenn man nun ALT und den entsprechenden Buchstaben wählt, springt der Cursor zum gewünschten TextEdit-Feld.
Bei mir nicht. Stattdessen erscheint in dem Textfeld, in dem ich gerade bin, ein Zeichen. In den Videos, wo das erwähnt wird, springt der Cursor wie gewünscht aus dem einen Textfeld in das nächste. Wie ist das zu erklären? Mir fallen zwei Möglichkeiten ein: Entweder ist dieser Mechanismus unter MacOS nicht funktionsfähig (ich fand bisher nur Beispiele, die unter Windows liefen), oder die Beschreibungen sind unvollständig und lassen eine zwingend notwendige Voreinstellung aus. Kann mir jemand sagen, welche von diesen Möglichkeiten zutrifft (oder welche andere, dritte das Rätsel löst)?
Label mit TextEdit verbinden
Siehe hier: Qt: Are keyboard shortcut assignments (using "&") in Qt apps not working for Mac OSX?
https://stackoverflow.com/questions/180 ... ng-for-mac
https://stackoverflow.com/questions/180 ... ng-for-mac
Ich folge hier einem Youtube-Video, habe lediglich das Fenster sehr vereinfacht. Das wurde mit dem QtDesigner erstellt, nur die letzten paar Zeilen sind von mir. Man sieht, dass die Labels mit den TextEdit-Feldern verbunden sind und dass der Cursor mit ALT-T in das obere und mit ALT-L in das untere springen müsste, was allerdings nicht geschieht. Anscheinend muss ich die TextEdit-Felder daran hindern, die Eingabe als Text zu interpretieren bzw. das Hauptfenster daran, dieses Ereignis überhaupt von den Textfeldern bearbeiten zu lassen. Die Frage, auf die keine der Anleitungen und Beschreibungen, die ich gefunden habe, eine Antwort gibt, ist, wie ich das erreichen kann.
Code: Alles auswählen
# -*- coding: utf-8 -*-
################################################################################
## Form generated from reading UI file 'buddytest.ui'
##
## Created by: Qt User Interface Compiler version 6.3.1
##
## WARNING! All changes made in this file will be lost when recompiling UI file!
################################################################################
from PySide6.QtCore import (QCoreApplication, QDate, QDateTime, QLocale,
QMetaObject, QObject, QPoint, QRect,
QSize, QTime, QUrl, Qt)
from PySide6.QtGui import (QBrush, QColor, QConicalGradient, QCursor,
QFont, QFontDatabase, QGradient, QIcon,
QImage, QKeySequence, QLinearGradient, QPainter,
QPalette, QPixmap, QRadialGradient, QTransform)
from PySide6.QtWidgets import (QAbstractButton, QApplication, QDialog, QDialogButtonBox,
QLabel, QLineEdit, QSizePolicy, QWidget)
class Ui_Dialog(object):
def setupUi(self, Dialog):
if not Dialog.objectName():
Dialog.setObjectName(u"Dialog")
Dialog.resize(400, 174)
self.buttonBox = QDialogButtonBox(Dialog)
self.buttonBox.setObjectName(u"buttonBox")
self.buttonBox.setGeometry(QRect(40, 120, 341, 32))
self.buttonBox.setOrientation(Qt.Horizontal)
self.buttonBox.setStandardButtons(QDialogButtonBox.Cancel|QDialogButtonBox.Ok)
self.label = QLabel(Dialog)
self.label.setObjectName(u"label")
self.label.setGeometry(QRect(40, 40, 71, 16))
self.label_2 = QLabel(Dialog)
self.label_2.setObjectName(u"label_2")
self.label_2.setGeometry(QRect(40, 90, 81, 16))
self.lineEdit = QLineEdit(Dialog)
self.lineEdit.setObjectName(u"lineEdit")
self.lineEdit.setGeometry(QRect(140, 40, 113, 21))
self.lineEdit_2 = QLineEdit(Dialog)
self.lineEdit_2.setObjectName(u"lineEdit_2")
self.lineEdit_2.setGeometry(QRect(130, 90, 113, 21))
#if QT_CONFIG(shortcut)
self.label.setBuddy(self.lineEdit)
self.label_2.setBuddy(self.lineEdit_2)
#endif // QT_CONFIG(shortcut)
self.retranslateUi(Dialog)
self.buttonBox.accepted.connect(Dialog.accept)
self.buttonBox.rejected.connect(Dialog.reject)
QMetaObject.connectSlotsByName(Dialog)
# setupUi
def retranslateUi(self, Dialog):
Dialog.setWindowTitle(QCoreApplication.translate("Dialog", u"Dialog", None))
self.label.setText(QCoreApplication.translate("Dialog", u"&TextLabel", None))
self.label_2.setText(QCoreApplication.translate("Dialog", u"Text&Label", None))
# retranslateUi
#######################################
class meinDialog(QDialog, Ui_Dialog):
def __init__(self):
super().__init__(parent=None)
self.setupUi(self)
if __name__ == "__main__":
app = QApplication()
w = meinDialog()
w.exec()
Es war allerdings nicht möglich, aus diesem Beitrag zu entnehmen, wie es denn nun geht. Per Google fand ich dann die Auskunft, dass es gar nicht geht. Einige weitere Suche hat dann den Hinweis ergeben, dass es inzwischen doch geht, und mit einigem Herumprobieren habe ich auch herausgefunden, wie. Hat sich also erledigt. Vielen Dank!
(Schön wäre natürlich, wenn der entsprechende Buchstabe unterstrichen wäre, wie es unter Windows üblich ist. So ist es einigermaßen unpraktisch. Man darf auch nicht zu viel verlangen.)
(Schön wäre natürlich, wenn der entsprechende Buchstabe unterstrichen wäre, wie es unter Windows üblich ist. So ist es einigermaßen unpraktisch. Man darf auch nicht zu viel verlangen.)
- __blackjack__
- User
- Beiträge: 13931
- Registriert: Samstag 2. Juni 2018, 10:21
- Wohnort: 127.0.0.1
- Kontaktdaten:
In dem Beitrag steht doch was man machen muss, also wie es geht‽ Da steht als Zitat aus der Qt-Dokumentation „On Mac, shortcuts are disabled by default. Call qt_set_sequence_auto_mnemonic() to enable them.“
“Java is a DSL to transform big Xml documents into long exception stack traces.”
— Scott Bellware
— Scott Bellware