PyQt5: Weißer Strich zwischen Widgets [Windows]

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
xXSkyWalkerXx1
User
Beiträge: 263
Registriert: Mittwoch 27. Juni 2018, 17:39

Samstag 12. Januar 2019, 17:16

Also, in allen PyQt5 Programmen, die ich momentan über Windows schreibe, kommt ein weißer Strich zwischen den Widgets, aber nur wenn ein Bild als Hintergrund verwendet wird.
Woran liegt das / wie kann man das beheben?

Beispiel Code:

Code: Alles auswählen

from PyQt5.QtWidgets import QApplication, QSplitter, QMainWindow,QHBoxLayout, QFrame, QLabel
from PyQt5.QtCore import Qt
import sys

class Demo:
    def __main__(self):
        self.app = QApplication(sys.argv)
        self.window = QMainWindow()
        self.window.setWindowTitle("DEMO")
        self.window.setGeometry(700,400,550,300)

        self.frame = QFrame()
        self.layout = QHBoxLayout()
        self.label1 = QLabel("Der weiße...")
        self.label2 = QLabel("   STRICH!  ")

        self.frame.setStyleSheet('background-image: url("bg.jpg")') #zum Testen Bild ändern!
        self.label1.setStyleSheet('background: transparent')
        self.label2.setStyleSheet('background: transparent')

        self.layout = QHBoxLayout()
        self.split_widgets = QSplitter(Qt.Vertical)
        self.split_widgets.addWidget(self.label1)
        self.split_widgets.addWidget(self.label2)
        self.layout.addWidget(self.split_widgets)

        self.window.setCentralWidget(self.frame)
        self.frame.setLayout(self.layout)
        self.window.show()

_class = Demo()
ui = _class.__main__()
sys.exit(_class.app.exec_())

Danke im Vorraus!
Grüße, xXSkyWalkerXx1
Sirius3
User
Beiträge: 9886
Registriert: Sonntag 21. Oktober 2012, 17:20

Samstag 12. Januar 2019, 18:52

@xXSkyWalkerXx1: da ich kein Windows habe, kann ich nichts zu weißen Strichen sagen.
Das Programm hat aber noch schwächen: Demo ist keine sinnvolle Klasse, was da in ___main__ steht und die letzten drei Zeilen gehören eigentlich in eine Funktion main. Doppelte Unterstriche sind für Python-Magische Methoden reserviert, __main__ ist das aber nicht. `_class` ist ein schlechter Variablenname, zu generisch. __main__ hat keinen Rückgabewert, `ui` ist also unnötig, wird aber auch gar nicht verwendet.
xXSkyWalkerXx1
User
Beiträge: 263
Registriert: Mittwoch 27. Juni 2018, 17:39

Samstag 12. Januar 2019, 19:26

Ich wollte nur auf die Schnelle ein Beispiel erzeugen, deshalb als Klassenname "Demo", das Gleiche mit "_class" - mir fiel auf die Schnelle kein besserer ein.
Sehe aber gerade, dass das "ui = " wegfallen müsste (außer das meintest bereits).
xXSkyWalkerXx1
User
Beiträge: 263
Registriert: Mittwoch 27. Juni 2018, 17:39

Sonntag 10. März 2019, 13:20

Code: Alles auswählen

from PyQt5.QtWidgets import QApplication, QSplitter, QMainWindow,QHBoxLayout, QFrame, QLabel
from PyQt5.QtCore import Qt
import sys

#ODER mit PySide:
#from PySide.QtWidgets import QApplication, QSplitter, QMainWindow,QHBoxLayout, QFrame, QLabel
#from PySide.QtCore import Qt


class Demo:
    def main(self):
        self.app = QApplication(sys.argv)
        self.window = QMainWindow()
        self.window.setWindowTitle("DEMO")
        self.window.setGeometry(700,400,550,300)

        self.frame = QFrame()
        self.layout = QHBoxLayout()
        self.label1 = QLabel("Der weiße...")
        self.label2 = QLabel("   STRICH!  ")

        self.frame.setStyleSheet('background-image: url("bg.jpg")') #zum Testen Bild ändern!
        self.label1.setStyleSheet('background: transparent')
        self.label2.setStyleSheet('background: transparent')

        self.layout = QHBoxLayout()
        self.split_widgets = QSplitter(Qt.Vertical)
        self.split_widgets.addWidget(self.label1)
        self.split_widgets.addWidget(self.label2)
        self.layout.addWidget(self.split_widgets)

        self.window.setCentralWidget(self.frame)
        self.frame.setLayout(self.layout)
        self.window.show()

_class = Demo()
ui = _class.main()
sys.exit(_class.app.exec_())

Keiner 'ne Idee warum da dieser weiße Strich ist? :D
Versuche gerade die Ursache zu finden, kann aber keine erkennen.

Allerdings konnte ich feststellen, dass dieser Strich nicht mehr vorhanden ist, sobald kein Hintergrundbild eingestellt ist.
xXSkyWalkerXx1
User
Beiträge: 263
Registriert: Mittwoch 27. Juni 2018, 17:39

Sonntag 10. März 2019, 13:58

GELÖST!

LÖSUNG: die Funktion "setHandleWidth(0)"
Antworten