Seite 1 von 1

Problem mit der unteren Fensterkante

Verfasst: Montag 30. August 2021, 23:13
von Zinober
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

Re: Problem mit der unteren Fensterkante

Verfasst: Dienstag 31. August 2021, 06:35
von peterpy
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

Re: Problem mit der unteren Fensterkante

Verfasst: Dienstag 31. August 2021, 06:57
von Zinober
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!

Re: Problem mit der unteren Fensterkante

Verfasst: Mittwoch 1. September 2021, 08:09
von Dennis89
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

Re: Problem mit der unteren Fensterkante

Verfasst: Mittwoch 1. September 2021, 08:30
von Sirius3
@Dennis89: der OP importiert tkinter mit kleinem t; das ist also Python3.

Re: Problem mit der unteren Fensterkante

Verfasst: Mittwoch 1. September 2021, 10:02
von Dennis89
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?

Re: Problem mit der unteren Fensterkante

Verfasst: Mittwoch 1. September 2021, 17:29
von Zinober
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