Button am "eindrücken" hindern, Fenster minimieren

Fragen zu Tkinter.
PhilippK
User
Beiträge: 9
Registriert: Sonntag 13. August 2006, 21:43
Wohnort: Berlin

Button am "eindrücken" hindern, Fenster minimieren

Beitragvon PhilippK » Sonntag 29. Juli 2007, 20:07

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
Flano
User
Beiträge: 43
Registriert: Sonntag 5. September 2004, 14:13

Beitragvon Flano » Montag 30. Juli 2007, 18:26

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
PhilippK
User
Beiträge: 9
Registriert: Sonntag 13. August 2006, 21:43
Wohnort: Berlin

Beitragvon PhilippK » Montag 30. Juli 2007, 23:00

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
schlangenbeschwörer
User
Beiträge: 419
Registriert: Sonntag 3. September 2006, 15:11
Wohnort: in den weiten von NRW
Kontaktdaten:

Beitragvon schlangenbeschwörer » Samstag 4. August 2007, 08:45

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
PhilippK
User
Beiträge: 9
Registriert: Sonntag 13. August 2006, 21:43
Wohnort: Berlin

Beitragvon PhilippK » Samstag 4. August 2007, 12:58

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

Wer ist online?

Mitglieder in diesem Forum: Google [Bot]