Seite 1 von 1

Tkinter: Position eines Button in einem Fenster in Abhängigkeit der Fenstergröße anpassen

Verfasst: Samstag 21. April 2018, 11:19
von Armend
Hallo zusammen,

kann mir einer bei folgendem helfen?

Ich möchte ein Button in einem Fenster in Abhängigkeit der Fenstergröße positionieren.
Wird also das Fenster mit der Maus vergrößert oder verkleinert, dann soll sich die Position des Buttons entsprechend ändern.

#Fenster generieren
Fenster = Tk()
Fenster.title("Test")
Fenster.geometry("250x250")

#Button erzeugen mit Ausgangsposition
Button_1 = Button(Fenster,text="Drücken")
Button_1.place(x=125,y=125)

#Auf die Skalierung des Fensters mit einem Event reagieren
Fenster.bind("<Configure>", Position)

#Funktion für das Anpassen der Position des Buttons
def Position(event):
fw = int(event.width)
fh = int(event.height)
Button_1.place(x=fw/2,y=fh/2)

#Loop
Fenster.mainloop()



Leider funktioniert der obige Code nicht. Button bleibt immer an der Ausgangsposition.
ich vermute mal, dass der Befehl Button_1.place(x=fw/2,y=fh/2) in der Funktion an dieser Stelle falsch ist.
Vielleicht brauche ich hier zum Aktualisieren der Position des Buttons im Fenster einen anderen Befehl.

Kann mir jemand helfen. Ich habe es vor kurzem mit der Oberflächenprogrammierung (über Tkinter) angefangen.


Viele Grüße
Armend

Re: Tkinter: Position eines Button in einem Fenster in Abhängigkeit der Fenstergröße anpassen

Verfasst: Samstag 21. April 2018, 11:23
von __deets__
Das ist ganz einfach: nicht den place Geometrie Manager verwenden. Sondern zb grid. Dann passiert das ganz von alleine.

Re: Tkinter: Position eines Button in einem Fenster in Abhängigkeit der Fenstergröße anpassen

Verfasst: Samstag 21. April 2018, 11:50
von Armend
Hi,

danke für deine Antwort erstmal.

Also auch mit grid habe ich dasselbe Problem.
Was meinst du denn mit automatisch. Meinst du damit, dass ich kein Event dafür brauche. Das habe ich versucht - funktioniert nicht.
Ist eigentlich auch klar, weil ich auch im grid eine Position festlegen muss.

Mit Event und grid habe ich dasselbe wie mit place. Position ändert sich nicht.

Kannst du bitte einen kurzen Code dazu reinstellen. Anhand eines Codes sieht man besser, was du genau meinst.

VG
Armend

Re: Tkinter: Position eines Button in einem Fenster in Abhängigkeit der Fenstergröße anpassen

Verfasst: Samstag 21. April 2018, 11:50
von Armend
PS: Ich nutze Python 2.7

Daher auch Tkinter und nicht tkinter :D

Re: Tkinter: Position eines Button in einem Fenster in Abhängigkeit der Fenstergröße anpassen

Verfasst: Samstag 21. April 2018, 12:13
von wuf
Hi Armend

Ist einfach mit pack:

Code: Alles auswählen

#!/usr/bin/env python
# -*- coding: utf-8 -*-

try:
    #~~ For Python 2.x
    import Tkinter as tk
except ImportError:
    #~~ For Python 3.x
    import tkinter as tk

app_win = tk.Tk()

tk.Button(app_win, text="My Button").pack(expand=True)

app_win.mainloop()
Gruss wuf :wink:

Re: Tkinter: Position eines Button in einem Fenster in Abhängigkeit der Fenstergröße anpassen

Verfasst: Samstag 21. April 2018, 13:08
von __deets__
Armend hat geschrieben: Also auch mit grid habe ich dasselbe Problem.
Was meinst du denn mit automatisch. Meinst du damit, dass ich kein Event dafür brauche. Das habe ich versucht - funktioniert nicht.
Ist eigentlich auch klar, weil ich auch im grid eine Position festlegen muss.

Mit Event und grid habe ich dasselbe wie mit place. Position ändert sich nicht.
Das stimmt nicht. Grid und pack arbeiten mit relativen Positionen, und die passen sich automatisch an. Und ja, dadurch entfällt die Notwendigkeit einer Ereignisbehandlung.

Re: Tkinter: Position eines Button in einem Fenster in Abhängigkeit der Fenstergröße anpassen

Verfasst: Samstag 21. April 2018, 16:40
von Armend
Hi,

danke für eure Hilfe.

Also ich habe jetzt herausgefunden, dass die place-Funktion auch eine Übergabe einer relativen Position erlaubt.
Zum Beispiel: Button_1.place(relx=0.2,rely=0.3) -> anstelle von (x=0.2,y=0.3)

Bei grid habe ich so etwas oder ähnliches noch nicht herausfinden können (muss aber nicht heißen, dass es nicht geht :) )
Das Beispiel von dir "wuf" hat bewirkt, dass das Button stets in der Mitte war. Ich würde aber gerne eine individuelle Position einstellen.

Sicherlich geht das alles auch mit pack und grid. Ich habe es jetzt mal mit place gemacht. 8)

Danke euch nochmal :)

VG
Armend