grid+sticky resiezed nicht wie ich es will - gelöst

Fragen zu Tkinter.
Antworten
Benutzeravatar
Mr_Snede
User
Beiträge: 387
Registriert: Sonntag 8. Februar 2004, 16:02
Wohnort: D-Dorf, Bo

Bei dem GUI zu meinem Thumbnailgenerator habe ich Probleme das Resiezeverhalten(keine Ahnung wie man das nennt) der Widgets nach meinen Wünschen einzustellen.

Was geht nicht:
[1] Die drei Zeilen "lbl_pic_dir" "bis btn_ende" bleiben zwar zusammen und verändern sich horizontal,
sollen aber zudem noch unter der Titelleiste des Fensters kleben bleiben.

[2] "frame_output" soll von "bis btn_ende" / "btn_los" alles ausfuellen, tut dies aber nur horizontal

[3] "txt_status_display" bleibt in der Startgrösse, soll aber "frame_output" immer voll ausfuellen

Hier der lauffähige aber funktionslose Quellcode:
(gegebenenfalls pic_dir anpassen!)

Code: Alles auswählen

#!/usr/bin/python
# -*- encoding: latin-1 -*-

import sys, os, Image, optparse, string
import tkFileDialog
import Tkinter as tk


def tk_gui(pic_dir, thumb_height, pic_list):
    """
    creates a Tkinter GUI
    """

    def open_it():
        pic_dir = tkFileDialog.askdirectory()
        btn_pic_dir["text"] = pic_dir

    def create_them():
            txt_status_display.insert(tk.END, "foo bar \n")

    master = tk.Tk()


    # ---- widget creation
    lbl_pic_dir = tk.Label(master, text = "Picture Directory:")
    lbl_thumb_height = tk.Label(master, text="Thumb height:")
    btn_ende = tk.Button(master, text = "Quit")

    btn_pic_dir = tk.Button(master, text = "Picture Directory")
    entry_thumb_height = tk.Entry(master)
    btn_los = tk.Button(master, text = "Los")

    frame_output = tk.Frame(master, relief=tk.RIDGE, borderwidth = 2)
    txt_status_display=tk.Text(frame_output)

    # ---- basic placement
    lbl_pic_dir.grid(row = 0, column = 0, sticky = "w")
    lbl_thumb_height.grid(row=1, column = 0, sticky = "w")
    btn_ende.grid(row = 2, column = 0, sticky = "w")

    btn_pic_dir.grid(row = 0, column = 1, sticky = "ew")
    entry_thumb_height.grid(row = 1, column = 1, sticky = "ew")
    btn_los.grid(row = 2, column = 1, sticky = "e")

    frame_output.grid(row = 3, columnspan = 2, sticky="nesw")
   .grid(row=0, column=0, sticky="nesw")

    # ---- enhanced widget settings (style + Funktions)
    master.title("tk-images2thumbs")
    master.columnconfigure(1, weight=1)

    lbl_pic_dir.config(underline = 0)
    lbl_thumb_height.config(underline = 0)
    btn_ende.config(relief = tk.GROOVE, fg = "#B00000", command = master.destroy, underline = 0) #B00000 = red

    btn_pic_dir.config(relief = tk.SUNKEN, text = pic_dir, command = open_it, bg = "white")
    entry_thumb_height.config(bg = "white")
    entry_thumb_height.insert(0, thumb_height)
    btn_los.config(relief = tk.GROOVE, fg = "#007500", underline = 0)#007500 = green
    btn_los.config(command = create_them)


    master.mainloop()



def main():
    pic_dir ="/home"
    pic_list =["jpg","jpeg"]

    tk_gui(pic_dir, 100 , pic_list)



if __name__ == '__main__':
    main()
cu Sebastian
Zuletzt geändert von Mr_Snede am Dienstag 8. März 2005, 16:25, insgesamt 1-mal geändert.
BugsBunny

Weiss nicht, ob´s dir hilft, aber versuch die sticky-Angabe mal in der Form: sticky = N+S oder sticky = E + W...

Müsste dein Problem lösen, wenn ich´s richtig verstanden habe...

Gruss, Bugs
Gast

Im Falle von frame_output sollte N+S+E+W genügen... :D
Benutzeravatar
Mr_Snede
User
Beiträge: 387
Registriert: Sonntag 8. Februar 2004, 16:02
Wohnort: D-Dorf, Bo

Hi BugsBunny,
über diese Schreibweise der sticky-Angabe bin ich auch schon gestolptert.
Leider war das nicht das Problem.
Sondern es fehlte "columnconfigure" und "rowconfigure" mit der Angabe "weight=1" für die Widgets auf denen ein Grid aufgezogen wird.

Hier das Ergebnis (zum Code oben nochmals reduziertet. Dafür verhält er sich nun wie ich es will!):

Code: Alles auswählen

#!/usr/bin/python
# -*- encoding: latin-1 -*-

import tkFileDialog
import Tkinter as tk


def tk_gui(pic_dir, thumb_height, pic_list):

    def open_it():
        pic_dir = tkFileDialog.askdirectory()
        btn_pic_dir["text"] = pic_dir


    master = tk.Tk()


    # ---- widget creation
    lbl_pic_dir = tk.Label(master, text = "Picture Directory:")
    btn_pic_dir = tk.Button(master, text = "Picture Directory")

    frame_output = tk.Frame(master, relief=tk.RIDGE, borderwidth = 2)
    txt_output=tk.Text(frame_output)

    # ---- basic placement
    lbl_pic_dir.grid(row = 0, column = 0, sticky = "w")
    btn_pic_dir.grid(row = 0, column = 1, sticky = "ew")

    frame_output.grid(row = 1, columnspan = 2, sticky="nesw")
    txt_output.grid(row=0, column=0, sticky="nesw")

    # ---- enhanced widget settings (style + Funktions)
    master.title("tk-images2thumbs")
    master.columnconfigure(1, weight=1)
    master.rowconfigure(1, weight=1)
    frame_output.columnconfigure(0, weight=1)
    frame_output.rowconfigure(0, weight=1)

    btn_pic_dir.config(relief = tk.SUNKEN, text = pic_dir, command = open_it, bg = "white")

    master.mainloop()


def main():
    pic_dir ="/home"
    pic_list =["jpg","jpeg"]

    tk_gui(pic_dir, 100 , pic_list)

if __name__ == '__main__':
    main()
cu Sebastian
Antworten