Python tkinter 网格管理器?

3 投票
2 回答
8622 浏览
提问于 2025-04-17 09:01

我刚学会在Python中使用tkinter(版本3.2.2),但是在使用网格管理器的时候遇到了一些问题。比如,当我使用button.grid(sticky=SE)时,按钮并没有放在右下角,而是放在了左上角,完全忽略了sticky这个设置。我到底哪里出错了呢?我试着搜索了一下,但没能找到我做错的地方。

2 个回答

1

当你说“我在这里做错了什么”的时候,你需要把你的代码贴出来,不然别人怎么能猜到哪里出问题呢。

下面的代码运行得很好,它把按钮放在了网格单元的右下角(东南方向),默认情况下是放在中间,而不是左上角(西北方向)。

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()
4

你可能需要为包含按钮的控件设置一个最小大小。如果不这样做,容器控件可能会缩小到只占显示按钮所需的空间。这样一来,粘附选项就没有意义了,因为容器控件根本没有空间来显示任何差异。

举个例子,使用一个 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()

结果是

在这里输入图片描述


另外,我在 Python3.2 中没有安装 tkinter,所以无法测试这个,但我认为让它在 Python3.2 中正常工作的唯一变化是

import tkinter as tk

而不是

import Tkinter as tk

撰写回答