Seite 1 von 1

Wechsel zwischen Vollbild und Veränderbar

Verfasst: Dienstag 27. August 2019, 09:33
von DMD-OS
Hallöchen :)

Ich habe Probleme zwischen Vollbild-Modus und Veränderbar-Modus hin- und herschalten zu können.
Dabei möchte ich den "Status" self.overrideredirect(True) nicht verlieren, da ich meinen eigenen Header beibehalten möchte!
Ansonsten würde soweit ich weiß ja der normale tkinter-Header gesetzt werden.
Der Vollbildmodus ist gut, nur der Veränderbarmodus ist nicht wirklich veränderbar :(

Code: Alles auswählen

import tkinter as tk


class Main(tk.Tk):
    def __init__(self):
        tk.Tk.__init__(self)

        # MAIN-WINDOW
        # -------------
        self.overrideredirect(True)
        self.state("zoomed")
        self.zoomed = True

        self.btn_text = tk.StringVar()
        btn = tk.Button(self, textvariable=self.btn_text, height=2, width=20, command=self.setting_DECREASE).pack(side=tk.TOP, pady=5)
        self.btn_text.set("Verkleinern")
        tk.Button(self, text="Schließen", height=2, width=20, command=self.quit).pack(side=tk.TOP, pady=5)

    def setting_DECREASE(self):
        if self.zoomed == False:
            self.zoomed = True
            self.btn_text.set("Verkleinern")
            self.state("zoomed")
        else:
            self.zoomed = False
            self.btn_text.set("Vergrößern")
            self.state("normal")
            self.geometry('700x500+385+200')
            self.resizable(True, True)  # das hier klappt nicht :(


main = Main()
main.mainloop()

Re: Wechsel zwischen Vollbild und Veränderbar

Verfasst: Dienstag 27. August 2019, 10:11
von __blackjack__
Natürlich klappt das nicht. Wenn Du das System keine Fensterleiste und keinen Rahmen für das Fenster zeichnen lässt, dann gibt es halt auch keinen Fensterrahmen an dem der Benutzer das Fenster kleiner oder grösser ziehen könnte. Das musst Du dann halt auch selbst implementieren, das *innerhalb* des Fensters so etwas wie ein Rahmen ist der entsprechend reagiert.

Re: Wechsel zwischen Vollbild und Veränderbar

Verfasst: Dienstag 27. August 2019, 15:15
von DMD-OS
Ich habe jetzt ein Frame mit Border gesetzt.
Es gibt aber trotzdem keine Reaktion :(

Code: Alles auswählen

import tkinter as tk


class Main(tk.Tk):
    def __init__(self):
        tk.Tk.__init__(self)

        self.overrideredirect(True)
        self.state("zoomed")
        self.zoomed = True

        self.frame = tk.Frame(self, highlightbackground="green", highlightcolor="green", highlightthickness=5, bd=5)
        self.frame.pack(fill=tk.BOTH, expand=True)

        self.btn_text = tk.StringVar()
        btn = tk.Button(self.frame, textvariable=self.btn_text, height=2, width=20,
                        command=self.setting_DECREASE).pack(side=tk.TOP, pady=5)
        self.btn_text.set("Verkleinern")
        tk.Button(self.frame, text="Schließen", height=2, width=20, command=self.quit).pack(side=tk.TOP, pady=5)

    def setting_DECREASE(self):
        if self.zoomed == False:
            self.zoomed = True
            self.btn_text.set("Verkleinern")
            self.state("zoomed")
        else:
            self.zoomed = False
            self.btn_text.set("Vergrößern")
            self.state("normal")
            self.geometry('700x500+385+200')
            self.resizable(True, True)  # das hier klappt nicht :(


main = Main()
main.mainloop()
Muß man jetzt den Rahmen noch irgendwie aktivieren?

Re: Wechsel zwischen Vollbild und Veränderbar

Verfasst: Dienstag 27. August 2019, 16:27
von __blackjack__
@DMD-OS: Diese Funktionalität steckt normalerweise im Fensterrahmen, also ausserhalb von Tk. Wenn der Fensterrahmen nicht da ist, Du aber trotzdem das Verhalten davon haben willst, musst Du das komplett selbst machen. Also irgendwie ein bisschen Platz lassen, eventuell den Mauscursor entsprechend anders anzeigen lassen, damit der Benutzer die gewohnte Rückmeldung bekommt, und auf Mausbewegungen mit gedrückter Maustaste mit entsprechenden Grössenänderungen des Fensters bzw. Fensterinhalts reagieren.

Kann man sich alles sparen wenn man nicht auf `overrideredirect()` bestehen würde.

Re: Wechsel zwischen Vollbild und Veränderbar

Verfasst: Mittwoch 28. August 2019, 07:28
von DMD-OS
das overrideredirect() ist mir egal, solange ich meinen eigenen header angezeigt bekomme und nicht den von tkinter.
ich weiß nicht warum, aber mit self.attributes("-fullscreen", True) hat das auch mal geklappt. da
hat er dann den header von tkinter nicht angezeigt.
ist das auch mit self.attributes("-fullscreen", True) oder self.state("-zoomed") hinzubekommen?

Re: Wechsel zwischen Vollbild und Veränderbar

Verfasst: Mittwoch 28. August 2019, 09:17
von __blackjack__
@DMD-OS: Das ist kein ”Header” von `tkinter` sondern das was die Fensterverwaltung als Titelzeile und Rahmen für Fenster anzeigt. Wenn Du das nicht haben willst, dann musst Du wie gesagt die Funktionalität, die da sonst von der Fensterverwaltung kommt, selbst programmieren.