Wechsel zwischen Vollbild und Veränderbar

Fragen zu Tkinter.
Antworten
DMD-OS
User
Beiträge: 165
Registriert: Freitag 28. Dezember 2018, 13:52

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()
Benutzeravatar
__blackjack__
User
Beiträge: 13080
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

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.
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
DMD-OS
User
Beiträge: 165
Registriert: Freitag 28. Dezember 2018, 13:52

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?
Benutzeravatar
__blackjack__
User
Beiträge: 13080
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@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.
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
DMD-OS
User
Beiträge: 165
Registriert: Freitag 28. Dezember 2018, 13:52

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?
Benutzeravatar
__blackjack__
User
Beiträge: 13080
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@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.
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
Antworten