Seite 1 von 1

Ränder von QWidget entfernen

Verfasst: Freitag 31. Januar 2020, 20:35
von JakobDev
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?

Re: Ränder von QWidget entfernen

Verfasst: Freitag 31. Januar 2020, 21:06
von __deets__
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.

Re: Ränder von QWidget entfernen

Verfasst: Freitag 31. Januar 2020, 21:53
von JakobDev
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?

Re: Ränder von QWidget entfernen

Verfasst: Samstag 1. Februar 2020, 00:08
von __blackjack__
@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‽

Re: Ränder von QWidget entfernen

Verfasst: Samstag 1. Februar 2020, 10:44
von JakobDev
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.

Re: Ränder von QWidget entfernen

Verfasst: Samstag 1. Februar 2020, 11:57
von __blackjack__
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.

Re: Ränder von QWidget entfernen

Verfasst: Samstag 1. Februar 2020, 12:32
von JakobDev
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.

Re: Ränder von QWidget entfernen

Verfasst: Samstag 1. Februar 2020, 13:03
von Sirius3
Und QVBoxLayout erbt von QBoxLayout.

Re: Ränder von QWidget entfernen

Verfasst: Samstag 1. Februar 2020, 13:42
von __deets__
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

Re: Ränder von QWidget entfernen

Verfasst: Dienstag 4. Februar 2020, 21:36
von JakobDev
Das QBoxLayout wusste ich nicht. Ich hab gedacht, QVBoxLayout erbt direkt von QLayout. Die gesuchte Funktion war dann insertWidget(). Danke für den Link.