Label mit TextEdit verbinden

Python und das Qt-Toolkit, erstellen von GUIs mittels des Qt-Designers.
Antworten
Auerhahn
User
Beiträge: 31
Registriert: Dienstag 23. Juli 2019, 06:48

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)?
__deets__
User
Beiträge: 14528
Registriert: Mittwoch 14. Oktober 2015, 14:29

Ich sehe keinen Grund, warum das am Mac anders sein soll. Das ist komplette Qt-Semantik. Wie schon gehabt: ein minimales Beispiel, welches das Problem illustriert, hilft uns, und im Zweifel sogar schon dir.
Sirius3
User
Beiträge: 17741
Registriert: Sonntag 21. Oktober 2012, 17:20

Siehe hier: Qt: Are keyboard shortcut assignments (using "&") in Qt apps not working for Mac OSX?
https://stackoverflow.com/questions/180 ... ng-for-mac
Auerhahn
User
Beiträge: 31
Registriert: Dienstag 23. Juli 2019, 06:48

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()
__deets__
User
Beiträge: 14528
Registriert: Mittwoch 14. Oktober 2015, 14:29

Ich Lag ja scheinbar falsch, das es da keinen Unterschied gibt. Hast du gesehen, was Sirius3 dazu gefunden hat?
Auerhahn
User
Beiträge: 31
Registriert: Dienstag 23. Juli 2019, 06:48

Ja. Daraus entnehme ich, dass es nicht geht. Anscheinend schon seit Jahren. Schade, aber dann eben nicht.
__deets__
User
Beiträge: 14528
Registriert: Mittwoch 14. Oktober 2015, 14:29

Oeh. Das ist falsch entnommen. Es sagt doch, dass es nur "by default disabled" ist, also explizit angeschaltet werden muss.
Auerhahn
User
Beiträge: 31
Registriert: Dienstag 23. Juli 2019, 06:48

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.)
Benutzeravatar
__blackjack__
User
Beiträge: 13077
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.“
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
Antworten