Python Tkinter Grid Manager? - PullRequest
       22

Python Tkinter Grid Manager?

3 голосов
/ 26 декабря 2011

Я только что узнал, как использовать tkinter в Python (3.2.2), и у меня возникли некоторые проблемы с использованием менеджера сетки.Например, когда я помещаю button.grid (sticky = SE), кнопка не помещается в нижний правый угол, а просто помещается в верхний левый, игнорируя липкое значение.Что я здесь не так делаю?Я пытался найти его, но я не мог понять, что я делаю неправильно.

Ответы [ 2 ]

4 голосов
/ 26 декабря 2011

Возможно, вам нужно установить минимальный размер для виджета, содержащего кнопку. Если вы этого не сделаете, виджет контейнера может уменьшиться, чтобы занять только пространство, необходимое для отображения кнопки. Если это так, опция закрепления будет бессмысленной, поскольку виджет контейнера не оставляет места для отображения каких-либо различий.

Например, используя tk.Frame в качестве виджета контейнера:

import Tkinter as tk

class SimpleApp(object):
    def __init__(self, master, **kwargs):
        title = kwargs.pop('title')
        frame = tk.Frame(master, borderwidth=5, bg = 'cyan', **kwargs)
        frame.grid()
        button = tk.Button(frame, text = title)
        button.grid(sticky = tk.SE)
        frame.rowconfigure('all', minsize = 200)
        frame.columnconfigure('all', minsize = 200)

def basic():
    root = tk.Tk()
    app = SimpleApp(root, title = 'Hello, world')
    root.mainloop()
basic()

выходы

enter image description here


PS. У меня не установлен tkinter в Python3.2, поэтому я не могу это протестировать, но я думаю, что единственное изменение, которое нужно сделать для работы с Python3.2, это

import tkinter as tk

вместо

import Tkinter as tk
1 голос
/ 26 декабря 2011

Когда вы говорите «Что я здесь не так делаю», вам нужно опубликовать свой код, иначе кто-нибудь сможет догадаться, что не так.правый угол (SE) ячейки сетки - по умолчанию это центр, а не верхний левый (NW).

from tkinter import Button, Label, Entry, Tk, SE
root = Tk()
Label(text="Lots o' Stuff", width=30, height=15,
      borderwidth=2, relief="raised").grid(rowspan=2)
Entry().grid(row=0, column=2)
Button(text="Hit Me").grid(row=1, column=2, sticky=SE)
root.mainloop()
...