Canvas auf gesamtem Bildschirm erzeugen

Python und das Qt-Toolkit, erstellen von GUIs mittels des Qt-Designers.
Antworten
Atalanttore
User
Beiträge: 200
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: 1940
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
Having more money does not insure happiness. People with ten million dollars are no happier than people with nine million dollars. – Hobart Brown
Atalanttore
User
Beiträge: 200
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: 4281
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: 1940
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.
Having more money does not insure happiness. People with ten million dollars are no happier than people with nine million dollars. – Hobart Brown
Atalanttore
User
Beiträge: 200
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