Seite 1 von 1

Button am "eindrücken" hindern, Fenster minimieren

Verfasst: Sonntag 29. Juli 2007, 20:07
von PhilippK
Hallo,

Ich wollte fragen, ob es möglich ist zu verhindern, dass sich ein Button "eindrückt", wenn man ihn anklickt, also so, dass sich sein Relief beim klicken nicht verändert.

Außerdem wollte ich wissen, wie der command zum minimieren des Fensters ist.

Vielen Dank schonmal für alle Antworten.
Philipp

Verfasst: Montag 30. Juli 2007, 18:26
von Flano
Hallo PhillippK,
habe statt Button ein Label genommen!

Code: Alles auswählen

import Tkinter as Tk

def minimieren(event):
    root.iconify()

root = Tk.Tk()

label = Tk.Label(root, text = 'Ok')
label.bind('<Button-1>', minimieren)
label.pack()

root.mainloop()
Gruss Flano

Verfasst: Montag 30. Juli 2007, 23:00
von PhilippK
Labels zu benutzen ist echt ne super Idee. Danke Flano!

Beim Minimieren gibt es aber folgendes Problem:
Ich habe den Rahmen des Fensters mit fenster.overrideredirect(1) entfernt.
Allerdings wird jetzt das Fenster vom Betriebssystem ignoriert. Es erscheint nicht mehr in der Taskleiste und beim Minimieren gibt es eine Fehlermeldung, dass Minimieren nicht funktioniert, wenn overrideredirect aktiviert ist.

Deshalb jetzt meine Frage:
Gibt es eine Möglichkeit den Rahmen des Fensters zu entfernen, ohne dass es anschließend vom Window Manager ignoriert wird?

Philipp

Verfasst: Samstag 4. August 2007, 08:45
von schlangenbeschwörer
Hi PhilippK!
PhilippK hat geschrieben:Labels zu benutzen ist echt ne super Idee
Naja, also es geht natürlich, aber die Musterlösung ist es nicht. Hier stehen nämlich nicht die Buttonmethoden flash() und invoke() zur Verfügung. Man könnte sie ja später mal brauchen.
Den Button kann man einfach mittels ´´relief´´-Attribut, das man auf "flat" setzt, "flach" machen.
PhilippK hat geschrieben:Gibt es eine Möglichkeit den Rahmen des Fensters zu entfernen, ohne dass es anschließend vom Window Manager ignoriert wird?
Also deine Lösung, bzw. die von Flano, ist eigentlich schon die "normale", und doch ist es kein Problem. Du musst die Sache nur anders angehen.
Nicht nach einer anderen Methode suchen, sondern die, die man hat, nehmen, und das Problem beseitigen...

Code: Alles auswählen

import Tkinter as tk

def icon():
        root.overrideredirect(False)
        root.iconify()
        root.wait_visibility()
        root.overrideredirect(True)
        root.focus_set()

root = tk.Tk()
root.title("Denk an den Titel!")

button = tk.Button(root, text="minimieren", command = icon)
button.pack()

root.overrideredirect(True)
root.mainloop()
Mal so nebenbei: Das, was iconify() macht, ist ja nicht wirklich das, was man unter Windows erwarten würde...aber ich glaub, da gibts nix anderes

mfg, jj

Verfasst: Samstag 4. August 2007, 12:58
von PhilippK
Hi schlangenbeschwörer,
schlangenbeschwörer hat geschrieben: Naja, also es geht natürlich, aber die Musterlösung ist es nicht. Hier stehen nämlich nicht die Buttonmethoden flash() und invoke() zur Verfügung. Man könnte sie ja später mal brauchen.
Den Button kann man einfach mittels ´´relief´´-Attribut, das man auf "flat" setzt, "flach" machen.
Der Button ist dann zwar flach, aber trotzdem wird er eingedrückt, wenn man ihn anklickt. Und gerade das wollte ich verhindern, da ich es bei meiner Oberfläche unpassend fand.
Auf invoke und flash werde ich dann aber verzichten müssen.
schlangenbeschwörer hat geschrieben: Mal so nebenbei: Das, was iconify() macht, ist ja nicht wirklich das, was man unter Windows erwarten würde...aber ich glaub, da gibts nix anderes
Vielen Dank erstmal für deine Lösung.
Iconify scheint schon das Richtige zu machen, das Problem ist eher, dass wait_visibility() komischerweise nicht wartet. Dadurch wird dann gleich nach dem minimieren overrideredirect auf True gesetzt, wodurch das Fenster wieder aus der Taskleiste springt.

Ich hab jetzt auf deinem Code aufbauend eine Lösung gefunden:

Code: Alles auswählen

import Tkinter as tk

def minimieren():
    root.overrideredirect(False) 
    root.iconify() 
    while root.winfo_viewable() == 0:
        root.wait_visibility()
    root.deiconify()
    root.overrideredirect(True)
    
root = tk.Tk()
root.geometry("150x50+50+50")
root.title("Fenstertitel")

button = tk.Button(root, text="Fenster minimieren", command = minimieren) 
button.place(x = 20, y = 10) 

root.overrideredirect(True) 
root.mainloop()
Philipp