Canvas auf gesamtem Bildschirm erzeugen

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

Donnerstag 8. November 2018, 00:33

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: 1410
Registriert: Samstag 2. Juni 2018, 10:21

Freitag 9. November 2018, 15:16

@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

Code: Alles auswählen

    **** COMMODORE 64 BASIC V2 ****
 64K RAM SYSTEM  38911 BASIC BYTES FREE
   CYBERPUNX RETRO REPLAY 64KB - 3.8P
READY.
█
Atalanttore
User
Beiträge: 125
Registriert: Freitag 6. August 2010, 17:03

Freitag 9. November 2018, 16:08

@__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: 3666
Registriert: Mittwoch 14. Oktober 2015, 14:29

Freitag 9. November 2018, 16:22

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: 1410
Registriert: Samstag 2. Juni 2018, 10:21

Freitag 9. November 2018, 16:39

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.

Code: Alles auswählen

    **** COMMODORE 64 BASIC V2 ****
 64K RAM SYSTEM  38911 BASIC BYTES FREE
   CYBERPUNX RETRO REPLAY 64KB - 3.8P
READY.
█
Atalanttore
User
Beiträge: 125
Registriert: Freitag 6. August 2010, 17:03

Samstag 10. November 2018, 17:43

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

Gruß
Atalanttore
Antworten