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
Button am "eindrücken" hindern, Fenster minimieren
Hallo PhillippK,
habe statt Button ein Label genommen!
Gruss Flano
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()
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
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
-
- User
- Beiträge: 419
- Registriert: Sonntag 3. September 2006, 15:11
- Wohnort: in den weiten von NRW
- Kontaktdaten:
Hi PhilippK!
Den Button kann man einfach mittels ´´relief´´-Attribut, das man auf "flat" setzt, "flach" machen.
Nicht nach einer anderen Methode suchen, sondern die, die man hat, nehmen, und das Problem beseitigen...
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
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.PhilippK hat geschrieben:Labels zu benutzen ist echt ne super Idee
Den Button kann man einfach mittels ´´relief´´-Attribut, das man auf "flat" setzt, "flach" machen.
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.PhilippK hat geschrieben:Gibt es eine Möglichkeit den Rahmen des Fensters zu entfernen, ohne dass es anschließend vom Window Manager ignoriert wird?
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()
mfg, jj
Hi schlangenbeschwörer,
Auf invoke und flash werde ich dann aber verzichten müssen.
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:
Philipp
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.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.
Auf invoke und flash werde ich dann aber verzichten müssen.
Vielen Dank erstmal für deine Lösung.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
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()