Python tkinter 网格管理器?
我刚学会在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