Seite 1 von 1

Canvas auf gesamtem Bildschirm erzeugen

Verfasst: Donnerstag 8. November 2018, 00:33
von Atalanttore
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

Re: Canvas auf gesamtem Bildschirm erzeugen

Verfasst: Freitag 9. November 2018, 15:16
von __blackjack__
@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

Re: Canvas auf gesamtem Bildschirm erzeugen

Verfasst: Freitag 9. November 2018, 16:08
von Atalanttore
@__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

Re: Canvas auf gesamtem Bildschirm erzeugen

Verfasst: Freitag 9. November 2018, 16:22
von __deets__
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.

Re: Canvas auf gesamtem Bildschirm erzeugen

Verfasst: Freitag 9. November 2018, 16:39
von __blackjack__
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.

Re: Canvas auf gesamtem Bildschirm erzeugen

Verfasst: Samstag 10. November 2018, 17:43
von Atalanttore
@__blackjack__:
Bei meinem Ubuntu mit Gnome 3 und X.org (nicht Wayland) funktionierte `showFullscreen()` bisher problemlos.

Gruß
Atalanttore