Fensterstyle auf ein zweites Fenster übertragen

Python und das Qt-Toolkit, erstellen von GUIs mittels des Qt-Designers.
Antworten
Omm
User
Beiträge: 90
Registriert: Samstag 7. April 2018, 14:05

Hallo zusammen
Wie kann ich die "qtmodern" Fenstereinstellung auf das zweite übertragen?
irgendwie müsste man die "qtmodern.styles.dark(app)" und "w = qtmodern.windows.ModernWindow(w)" laden können.
Hat da jemand einen Ansatz.
Der Code unten dient nur zu testzwecken.

Code: Alles auswählen

#!/usr/bin/env python
import sys
from PyQt5.QtWidgets import QApplication, QMainWindow, QPushButton, QWidget
import qtmodern.styles
import qtmodern.windows

class AnotherWindow(QWidget):
    # neues Fenster
    def __init__(self):
        super().__init__()


class MainWindow(QMainWindow):

    def __init__(self):
        super().__init__()
        self.w = AnotherWindow()
        self.button = QPushButton("Klick mich mal")
        self.button.clicked.connect(self.show_new_window)
        self.setCentralWidget(self.button)

    def show_new_window(self):
        self.w.show()


if __name__ == '__main__':
    app = QApplication(sys.argv)
    w = MainWindow()
    qtmodern.styles.dark(app)
    w = qtmodern.windows.ModernWindow(w)
    w.show()
    app.exec_()
Benutzeravatar
__blackjack__
User
Beiträge: 13069
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@Omm: Wenn eine `__init__()` nur daraus besteht die `__init__()` der Basisklasse aufzurufen, dann kann man sich die `__init__()` auch sparen, denn die tut dann ja nix was nicht auch ohne sie passieren würde. Damit ist dann `AnotherWindow` komplett überflüssig. Das ganze etwas reduziert:

Code: Alles auswählen

#!/usr/bin/env python3
import sys

import qtmodern.styles
import qtmodern.windows
from PyQt5.QtWidgets import QApplication, QMainWindow, QPushButton, QWidget


class MainWindow(QMainWindow):
    def __init__(self):
        super().__init__()
        self.window = qtmodern.windows.ModernWindow(QWidget())
        button = QPushButton("Klick mich mal")
        button.clicked.connect(self.window.show)
        self.setCentralWidget(button)


def main():
    app = QApplication(sys.argv)
    qtmodern.styles.dark(app)
    window = qtmodern.windows.ModernWindow(MainWindow())
    window.show()
    app.exec_()


if __name__ == "__main__":
    main()
Und auch mit dem offensichtlichen was man machen muss damit das andere Fenster auch ”besonders” wird.

Für solche Anwendungen suche ich mir in der Regel ersatz der nicht glaubt alles besser wissen zu wollen. Diese Fenster werden auf meinem System anders dargestellt. Beispielsweise kein Schatten wie bei allen anderen Fenstern. Zudem erscheinen die grundsätzlich an der Position 0,0 auf dem Desktop und nicht dort wo Platz ist. Besch…eidener kann sich ein neues Fenster nicht verhalten.

Wie Fenster aussehen, wo sie platziert werden, was in der Titelzeile an Buttons angezeigt werden soll und was nicht, das möchte *ich* entscheiden. Da soll nicht jeder Anwendungsentwickler mir seine eigenen Ideen aufdrücken was angeblich toll ist.
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
Omm
User
Beiträge: 90
Registriert: Samstag 7. April 2018, 14:05

__blackjack__ hat geschrieben: Mittwoch 30. Dezember 2020, 12:00 @Omm: Wenn eine `__init__()` nur daraus besteht die `__init__()` der Basisklasse aufzurufen, dann kann man sich die `__init__()` auch sparen, denn die tut dann ja nix was nicht auch ohne sie passieren würde. Damit ist dann `AnotherWindow` komplett überflüssig. Das ganze etwas reduziert:

Code: Alles auswählen

#!/usr/bin/env python3
import sys

import qtmodern.styles
import qtmodern.windows
from PyQt5.QtWidgets import QApplication, QMainWindow, QPushButton, QWidget


class MainWindow(QMainWindow):
    def __init__(self):
        super().__init__()
        self.window = qtmodern.windows.ModernWindow(QWidget())
        button = QPushButton("Klick mich mal")
        button.clicked.connect(self.window.show)
        self.setCentralWidget(button)


def main():
    app = QApplication(sys.argv)
    qtmodern.styles.dark(app)
    window = qtmodern.windows.ModernWindow(MainWindow())
    window.show()
    app.exec_()


if __name__ == "__main__":
    main()
Und auch mit dem offensichtlichen was man machen muss damit das andere Fenster auch ”besonders” wird.

Für solche Anwendungen suche ich mir in der Regel ersatz der nicht glaubt alles besser wissen zu wollen. Diese Fenster werden auf meinem System anders dargestellt. Beispielsweise kein Schatten wie bei allen anderen Fenstern. Zudem erscheinen die grundsätzlich an der Position 0,0 auf dem Desktop und nicht dort wo Platz ist. Besch…eidener kann sich ein neues Fenster nicht verhalten.

Wie Fenster aussehen, wo sie platziert werden, was in der Titelzeile an Buttons angezeigt werden soll und was nicht, das möchte *ich* entscheiden. Da soll nicht jeder Anwendungsentwickler mir seine eigenen Ideen aufdrücken was angeblich toll ist.
@__blackjack__
ja klar, es geht ja nur darum, wie kann der Window-Style von einem Fenster auf das anderes Fenster übertragen/angepasst werden, wenn es nicht main ist. Dass dieses Fenster an Besch... pos ist und das ganz keinen Sinn so macht, hat für die Funktion keine Relevanz. Deshalb auch die Bemerkung, dass es nur als Testzweck dient.
Diese Anwendung die ich machen möchte, ist ausschliesslich für mich alleine. D.h. ich muss auf nichts anderes achten. Aber eben, ich bin immer noch in der Phase, was ist überhaupt möglich und suche da Hilfe.
Benutzeravatar
__blackjack__
User
Beiträge: 13069
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@Omm: Du musst nicht den gesamten Beitrag zitieren, der steht ja gleich darüber schon mal. 🙂

Ich bin mir jetzt nicht ganz sicher: ist Deine Frage jetzt beantwortet, und falls nicht, warum nicht?
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
Omm
User
Beiträge: 90
Registriert: Samstag 7. April 2018, 14:05

@__blackjack__
ehrlichgesagt nicht.
Evtl. ist die Frage falsch gestellt. Sorry dafür.

Das "class MainWindow(QMainWindow):" hat den Style und auch "ModernWindow" welche im main() definiert ist. Dies passt soweit.
Wen es jedoch kein main() Formular ist, also von einem anderen Formular geöffnet wird, wird der code Teil im main() nicht geladen.
D.h. die "styled_window = qtmodern.windows.ModernWindow(main_window)" wird nicht geladen.

Im Beispiel von mir, also wenn man auf den Button klickt, wird ein zweites Fenster geöffnet mit dem syle innerhalb vom Fenster, aber nicht mit dem "styled_window = qtmodern.windows.ModernWindow(main_window)".

Somit wird die Titelleiste nur auf dem main() angewendet, aber nicht auf den weiteren Fenstern die geöffnet werden.
Im Netz konnte ich nichts finden. Vielleicht suche ich einfach falsch. :D
Benutzeravatar
__blackjack__
User
Beiträge: 13069
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@Omm: Du hast also den Code nicht ausprobiert und/oder die Änderung nicht gesehen. Oder ich versteh wirklich nicht was das Problem ist, denn bei meinem Code haben beide Fenster dieses `qtmodern`-Design.
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
Omm
User
Beiträge: 90
Registriert: Samstag 7. April 2018, 14:05

__blackjack__ hat geschrieben: Mittwoch 30. Dezember 2020, 15:53 @Omm: Du hast also den Code nicht ausprobiert und/oder die Änderung nicht gesehen. Oder ich versteh wirklich nicht was das Problem ist, denn bei meinem Code haben beide Fenster dieses `qtmodern`-Design.
huch , ich bin zu doof dafür. :oops:

vielen Dank für deine Hilfe klapp perfekt

Code: Alles auswählen

#!/usr/bin/env python3
import sys

import qtmodern.styles
import qtmodern.windows
from PyQt5.QtWidgets import QApplication, QMainWindow, QPushButton, QWidget, QVBoxLayout


class AnotherWindow(QWidget):
    # neues Fenster
    def __init__(self):
        super().__init__()
        self.V_barButton = QVBoxLayout()
        self.button = QPushButton("Klick mich mal")
        self.V_barButton.addWidget(self.button)
        self.V_barButton.addStretch(-1)
        self.setLayout(self.V_barButton)



class MainWindow(QMainWindow):
    def __init__(self):
        super().__init__()
        w = AnotherWindow()
        self.window = qtmodern.windows.ModernWindow(w)
        button = QPushButton("Klick mich mal")
        button.clicked.connect(self.window.show)
        self.setCentralWidget(button)



def main():
    app = QApplication(sys.argv)
    qtmodern.styles.dark(app)
    window = qtmodern.windows.ModernWindow(MainWindow())
    window.show()
    app.exec_()


if __name__ == "__main__":
    main()
Antworten