Problem mit der unteren Fensterkante

Fragen zu Tkinter.
Antworten
Zinober
User
Beiträge: 16
Registriert: Freitag 26. Dezember 2014, 15:58

Hallo,

ich hänge seit Tagen an diesem Problem fest und würde mich freuen, wenn mir jemand einen Hinweis in die richtige Richtung geben könnte!

Ich habe diesen Code:

Code: Alles auswählen

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

import tkinter as tk

class App(tk.Frame):
    def __init__(self, parent):
        tk.Frame.__init__(self, parent)
        
        self.config(background="yellow")
        
        self.cv = tk.Canvas(self, background="bisque",width=500, height=500)
        
        # def resize(event):
            # w,h = event.width, event.height
            # print ('W '  + str(w))
            # print ('H '  + str(h))
            # self.cv.config(width=w)
        
        #self.cv.bind('<Configure>', resize)
        
        self.xsb = tk.Scrollbar(self, orient="horizontal", command=self.cv.xview)
        self.ysb = tk.Scrollbar(self, orient="vertical", command=self.cv.yview)
        self.cv.configure(yscrollcommand=self.ysb.set, xscrollcommand=self.xsb.set)
        
        self.cv.grid(row=0, column=0, sticky="nsew")
        self.xsb.grid(row=1, column=0, sticky="ews")
        self.ysb.grid(row=0, column=1, sticky="nse")
        self.grid_rowconfigure(0, weight=2)
        self.grid_columnconfigure(0, weight=2)

if __name__ == "__main__":
    root = tk.Tk()
    app = App(root)
    app.grid(row=0, column=0, sticky="nsew")
    root.grid_columnconfigure(0, weight=1)
    root.mainloop()
Das wird auch alles sehr schön gezeichnet und wenn ich die Fenstergröße mit der Maus in horizontale Richtung ändere, passen sich die horizontale Ausdehnung der unteren Scrollbar und des Canvas an die neuen Fenstermaße an. In vertikale Richtung funktioniert das aber nicht. Wenn ich das Fenster nach unten vergrößere, entsteht eine graue Fläche unterhalb der Scrollbar. Wenn ich das Fenster verkleinere, wird am unteren Rand abgeschnitten. Ich habe schon alles mögliche ausprobiert, was man so im Internet findet, aber ich habe weder eine Lösung noch eine Erkärung finden können. (u.a. auch eine Version mit pack. Da ist es genauso.)

Interessanterweise liefert das Ziehen am unteren Fensterrand mit der Maus auch kein <Configure>-Event (der auskommentierte Teil im Code). Wenn ich rechts oder links ziehe, werden sowohl Höhe als auch Breite zurückgegeben, wenn ich unten oder oben ziehe, weder das eine noch das andere.

Vielen Dank und viele Grüße
Thorsten
Benutzeravatar
peterpy
User
Beiträge: 188
Registriert: Donnerstag 7. März 2013, 11:35

Hallo Thorsten

wenn Du die Spalten Dehnung erlaubst, kannst Du das auch mit den Zeilen.

Code: Alles auswählen

root.grid_rowconfigure(0, weight=1)
Gruss Peter
Zinober
User
Beiträge: 16
Registriert: Freitag 26. Dezember 2014, 15:58

Kurz und schmerzlos!

Das löst tatsächlich beide Probleme: Die inneren Widgets vergrößern und verkleinern sich jetzt auch in y-Richtung und das <Configure>-Event gibt jetzt auch bei allen Änderungen des Fensters Werte zurück.

Und ich verstehe jetzt die Arbeitsweise von Grid auch noch ein bisschen besser.

Vielen Dank!
Benutzeravatar
Dennis89
User
Beiträge: 1153
Registriert: Freitag 11. Dezember 2020, 15:13

Hallo,

unabhängig von deinem Problem, nutzt du noch Python2?
Das wird schon lange nicht mehr von den Entwickler weiterentwickelt/unterstützt. Wenn du es noch nicht getan hast, solltest du auf Python3 umsteigen, ansonsten den Shebang anpassen.

Grüße
Dennis
"When I got the music, I got a place to go" [Rancid, 1993]
Sirius3
User
Beiträge: 17738
Registriert: Sonntag 21. Oktober 2012, 17:20

@Dennis89: der OP importiert tkinter mit kleinem t; das ist also Python3.
Benutzeravatar
Dennis89
User
Beiträge: 1153
Registriert: Freitag 11. Dezember 2020, 15:13

Danke @Sirius3

Dann also nur Shebang anpassen 🙂

Grüße
Dennis

Edit: Oder vllt nicht? Wenn nur Python3 auf dem System installiert ist, dann wird das ja mit „python“ aufgerufen?
"When I got the music, I got a place to go" [Rancid, 1993]
Zinober
User
Beiträge: 16
Registriert: Freitag 26. Dezember 2014, 15:58

Hallo,

ich glaube, das hängt auch vom Betriebssystem ab. Ich bin auf Manjaro. Da heißt Python 3 standardmäßig 'python'.

Unter Debian 10 und Ubuntu 20.04 zeigt 'python' standardmäßig ziemlich sicher noch auf Python 2 und Python 3 muss man über 'python3' ansprechen.

Viele Grüße
Thorsten
Antworten