Tkinter 中的网格管理器:columnspan 被忽略
Grid manager in Tkinter: columnspan is ignored
我正在尝试使用 Tkinter 的网格管理器获取 window 的特定布局。所需的布局是这样的:
_______________________________________________________
| | | |
| | | |
| canvas A | canvas B | canvas C |
| | | |
| | | |
|------------------------------------------------------
| B0 | B1 | B2 | B3 | B4 | B5 | B6 | B7 | B8 |
| ____|_____|_____|_____|_____|_____|_____|_____|_____|
其中 B 代表 9 个按钮之一。下面的代码很接近,但在我看来 canvases A 和 C 只是忽略了 columnspan=3
参数,而 canvas B 正确使用了它。
import matplotlib
matplotlib.use('TkAgg')
import matplotlib.pyplot as plt
from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg
import Tkinter as Tk
def generate_window():
root = Tk.Tk()
root.rowconfigure((0,1), weight=1, minsize=35)
root.columnconfigure((0,8), weight=1, minsize=200)
titles = ['A', 'B', 'C']
for t, n in zip(titles, xrange(1, 4)):
fig = plt.figure()
ax = fig.add_subplot(111)
ax.plot([1,2,3,4], [1,4,9,16], 'ro')
ax.set_title(t)
canvas = FigureCanvasTkAgg(fig, master=root)
canvas.get_tk_widget().grid(row=0, column=(n-1)*3, columnspan=3, sticky='NSEW')
for x in xrange(0, 9):
Tk.button = Tk.Button(master=root, text=str(x), command= lambda x=x:button(x))
Tk.button.grid(row=1, column=x, sticky='NSEW')
Tk.mainloop()
def button(button_number):
print button_number
generate_window()
This 类似的问题没有解决这个问题,因为这里没有空栏
您只对几列应用了一个列权重,因此您最终得到了不相等的列宽。如果您希望所有列的大小相同,最简单的解决方案是为它们赋予相同的权重 and/or 使用 uniform
选项。
例如:
root.columnconfigure((0,1,2,3,4,5,6,7,8), weight=1)
我正在尝试使用 Tkinter 的网格管理器获取 window 的特定布局。所需的布局是这样的:
_______________________________________________________
| | | |
| | | |
| canvas A | canvas B | canvas C |
| | | |
| | | |
|------------------------------------------------------
| B0 | B1 | B2 | B3 | B4 | B5 | B6 | B7 | B8 |
| ____|_____|_____|_____|_____|_____|_____|_____|_____|
其中 B 代表 9 个按钮之一。下面的代码很接近,但在我看来 canvases A 和 C 只是忽略了 columnspan=3
参数,而 canvas B 正确使用了它。
import matplotlib
matplotlib.use('TkAgg')
import matplotlib.pyplot as plt
from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg
import Tkinter as Tk
def generate_window():
root = Tk.Tk()
root.rowconfigure((0,1), weight=1, minsize=35)
root.columnconfigure((0,8), weight=1, minsize=200)
titles = ['A', 'B', 'C']
for t, n in zip(titles, xrange(1, 4)):
fig = plt.figure()
ax = fig.add_subplot(111)
ax.plot([1,2,3,4], [1,4,9,16], 'ro')
ax.set_title(t)
canvas = FigureCanvasTkAgg(fig, master=root)
canvas.get_tk_widget().grid(row=0, column=(n-1)*3, columnspan=3, sticky='NSEW')
for x in xrange(0, 9):
Tk.button = Tk.Button(master=root, text=str(x), command= lambda x=x:button(x))
Tk.button.grid(row=1, column=x, sticky='NSEW')
Tk.mainloop()
def button(button_number):
print button_number
generate_window()
This 类似的问题没有解决这个问题,因为这里没有空栏
您只对几列应用了一个列权重,因此您最终得到了不相等的列宽。如果您希望所有列的大小相同,最简单的解决方案是为它们赋予相同的权重 and/or 使用 uniform
选项。
例如:
root.columnconfigure((0,1,2,3,4,5,6,7,8), weight=1)