Ränder von QWidget entfernen

Python und das Qt-Toolkit, erstellen von GUIs mittels des Qt-Designers.
Antworten
Benutzeravatar
JakobDev
User
Beiträge: 63
Registriert: Mittwoch 17. Juli 2019, 17:20

Ich arbeite momentan an einem Editor, der QScintilla nutzt. Bisher sieht das ganze so aus:
Bild
QScintilla wird direkt als Tabwidget benutzt. Nun will ich aber innerhalb des Tabs Meldungen anzeigen lassen z.B. wenn die Datei von einem anderen Programm verändert wurde. Dazu habe ich folgendes Widget erstellt:

Code: Alles auswählen

from PyQt5.QtWidgets import QWidget, QVBoxLayout
from PyQt5.Qsci import QsciScintilla

class EditWidget(QWidget):
    def __init__(self):
        super().__init__()
        self.code_widget = QsciScintilla()

        main_layout = QVBoxLayout()
        main_layout.addWidget(self.code_widget)

        self.setLayout(main_layout)

    def get_code_edit_widget(self):
        return self.code_widget
Der Plan ist, eventuelle Meldungen als Widget oberhalb von QScintilla im Layout einzufügen. Wenn ich jedoch jetzt dieses Widget statt QScintilla direkt als Tab benutzte, sieht das ganze so aus:
Bild
Wie man unschwer erkennen kann, hat das Widget jetzt diese hässlichen Ränder. Wie bekomme ich die Ränder weg, sodass es wie im ersten Bild aussieht?
__deets__
User
Beiträge: 14542
Registriert: Mittwoch 14. Oktober 2015, 14:29

Sowas solltest du mit dem Designer machen, denn da kannst du an den ganzen Dingen wie margins und paddings und was weiss ich nicht alles rumschrauben, bis es passt.
Benutzeravatar
JakobDev
User
Beiträge: 63
Registriert: Mittwoch 17. Juli 2019, 17:20

Durch das Stichwort margins habe ich die benötigte Funktion gefunden.

Code: Alles auswählen

main_layout.setContentsMargins(0,0,0,0)
Ich habe allerdings noch eine andere Frage:
Wie kann ich im nachhinein ein Widget über dem Editorwidget im QVBoxLayout einfügen?
Benutzeravatar
__blackjack__
User
Beiträge: 13111
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@JakobDev: Was hast Du denn versucht? Du suchst ja nach einer alternative zu `addWidget()`. Welche Methoden kämen denn dafür in Frage? Vielleicht enthält die Dokumentation zu `addWidget()` einen Hinweis‽
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
Benutzeravatar
JakobDev
User
Beiträge: 63
Registriert: Mittwoch 17. Juli 2019, 17:20

Wenn es so einfach wäre, hätte ich die Lösung schon selbst gefunden. In der Dokumentation steht leider nichts von einer entsprechenden Funktion. Es gibt dort nur Funktionen zum entfernen und ersetzen eines Widgets, aber keine, um eins am Anfang hinzuzufügen.
Benutzeravatar
__blackjack__
User
Beiträge: 13111
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

Das ist ja nicht nicht die komplette relevante Dokumentation. Allgemein hat natürlich nicht jedes `QLayout` eine Methode zum Einfügen weil das ja auch nicht bei jedem Layout-Typ sinnvoll sein muss. Aber Du hast da ja kein allgemeines `QLayout` sondern eine Spezialisierung bei der das Einfügen sinnvoll ist und deshalb auch eine Methode dafür existiert. Und natürlich auch dokumentiert ist.
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
Benutzeravatar
JakobDev
User
Beiträge: 63
Registriert: Mittwoch 17. Juli 2019, 17:20

In der Dokumentation von QVBoxLayout steht keine einzige Methode. Du kannst durchaus davon ausgehen, dass ich vorher im Internet nachschaue, ob ich was finde, bevor ich frage. Und da du die Methode offenbar kennst, wäre es nett, sie einfach zu nennen.
Sirius3
User
Beiträge: 17753
Registriert: Sonntag 21. Oktober 2012, 17:20

Und QVBoxLayout erbt von QBoxLayout.
__deets__
User
Beiträge: 14542
Registriert: Mittwoch 14. Oktober 2015, 14:29

Genau wegen dieser Problematik hat jedes Qt Objekt in der Doku den Link für die vollständige Liste der Eigenschaften: https://doc.qt.io/qt-5/qvboxlayout-members.html
Benutzeravatar
JakobDev
User
Beiträge: 63
Registriert: Mittwoch 17. Juli 2019, 17:20

Das QBoxLayout wusste ich nicht. Ich hab gedacht, QVBoxLayout erbt direkt von QLayout. Die gesuchte Funktion war dann insertWidget(). Danke für den Link.
Antworten