Canvas auf gesamtem Bildschirm erzeugen

Python und das Qt-Toolkit, erstellen von GUIs mittels des Qt-Designers.
Antworten
Atalanttore
User
Beiträge: 407
Registriert: Freitag 6. August 2010, 17:03

Hallo

Ich bin gerade dabei eines meiner Beispielprogramme mit Tkinter-Oberfläche nach PyQt5 zu portieren.

In jenem Beispiel wird mit folgender Anweisung ein Canvas auf dem gesamten Bildschirm erzeugt.

Code: Alles auswählen

self.game_window.attributes("-fullscreen", True)
self.canvas = Canvas(self.game_window,
                             width=self.game_window.winfo_screenwidth(),
                             height=self.game_window.winfo_screenheight(),
                             highlightthickness=0)
Bisher habe ich leider nicht herausgefunden, welche Methoden und Parameter bei PyQt5 für das gleiche Verhalten notwendig sind. Weiß das jemand?

Gruß
Atalanttore
Benutzeravatar
__blackjack__
User
Beiträge: 13003
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@Atalanttore: Also ich habe mal was ganz abgefahrenes und sehr um die Ecke gedachtest gemacht und nach dem Wort „fullscreen“ in der Qt-Dokumentation gesucht und habe doch tatsächlich herausgefunden, dass `QWidget` ein Property mit dem Namen `fullScreen` hat: http://doc.qt.io/qt-5/qwidget.html#fullScreen-prop
“Most people find the concept of programming obvious, but the doing impossible.” — Alan J. Perlis
Atalanttore
User
Beiträge: 407
Registriert: Freitag 6. August 2010, 17:03

@__blackjack__: Krasse Aktion. Ich habe die Doku von PyQt5 nach dem Wort „fullscreen“ abgesucht, aber nichts gefunden.

Dem Property `fullScreen` einfach ein `True` zuweisen hat nicht funktioniert. Eine Fehlermeldung kam aber auch keine keine. Warum ist das so?

Stattdessen schaltet bei mir die Methode `showFullScreen()` in den gewünschten Vollbildmodus ohne Titelleiste, Taskleiste, usw. um.

Mein Beispielcode sieht folgendermaßen aus:

Code: Alles auswählen

import sys
from PyQt5.QtWidgets import QApplication, QMainWindow


class FullScreenWindow(QMainWindow):
    def __init__(self, parent=None):
        super().__init__(parent)
        self.showFullScreen()


if __name__ == "__main__":
    app = QApplication(sys.argv)
    full_screen_window = FullScreenWindow()
    full_screen_window.show()
    sys.exit(app.exec_())
Ist mein funktionierendes Codebeispiel auch für einen alten Pythonhasen in Ordnung oder enthält es Macken?

Gruß
Atalanttore
__deets__
User
Beiträge: 14493
Registriert: Mittwoch 14. Oktober 2015, 14:29

Die PyQt Dokumentation hat nicht den Anspruch, alle Hunderten oder tausenden qt Klassen zu dokumentieren. Du musst dir die C++-Doku anschauen.

Und PyQt macht das verpackte C++ auch nicht zu Python. Damit ist das aller Wahrscheinlichkeit nach kein property (sowas kennt C++ nicht) sondern eine Methode.
Benutzeravatar
__blackjack__
User
Beiträge: 13003
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

Jo, hätte ich wohl dazu schreiben sollen das mit „Property“ in meinem Beitrag die Qt-Terminologie gemeint war und kein Python `property()`. Properties bei Qt sind durch Methoden gekapselte Attribute (also potentiell berechnete Attribute, wie bei Python's `property()`) und da ist in der Dokumentation ja auch nur eine Methode für die Abfrage gelistet. Und bei „see also“ dann das (Qt-)Property `windowState` das auch eine Setter-Methode hat und den Wert Qt::WindowFullScreen kennt.

In der Dokumentation zu `showFullscreen()` ist auch eine Warnung was die Wirkung auf verschiedenen Plattformen angeht.
“Most people find the concept of programming obvious, but the doing impossible.” — Alan J. Perlis
Atalanttore
User
Beiträge: 407
Registriert: Freitag 6. August 2010, 17:03

@__blackjack__:
Bei meinem Ubuntu mit Gnome 3 und X.org (nicht Wayland) funktionierte `showFullscreen()` bisher problemlos.

Gruß
Atalanttore
Antworten