【问题标题】:Grid manager in Tkinter: columnspan is ignoredTkinter 中的网格管理器:列跨度被忽略
【发布时间】:2017-06-20 22:32:25
【问题描述】:

我正在尝试使用 Tkinter 的网格管理器获取特定的窗口布局。所需的布局是这样的:

_______________________________________________________
|                 |                 |                 | 
|                 |                 |                 | 
|    canvas A     |    canvas B     |    canvas C     | 
|                 |                 |                 | 
|                 |                 |                 | 
|------------------------------------------------------
|  B0 |  B1 |  B2 |  B3 |  B4 |  B5 |  B6 |  B7 |  B8 |   
| ____|_____|_____|_____|_____|_____|_____|_____|_____|

其中 B 代表 9 个按钮之一。下面的代码很接近,但在我看来,画布 A 和 C 只是忽略了 columnspan=3 参数,而画布 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 类似措辞的问题并没有解决这个问题,因为这里没有空列

【问题讨论】:

  • 我不明白这个问题。在我看来,每个画布跨越三列。列的宽度不相等,因此列的大小不同,但这似乎是有意的,因为您只为几列赋予权重。顺便说一句,如果你删除了对 matplotlib 的依赖,回答这个问题会容易得多。只需使用空白画布即可。
  • 啊,我误解了columnconfigure 的工作方式。我认为这是将权重应用于每一列。如果您对此效果添加答案,我会接受。谢谢。

标签: python tkinter tkinter-canvas


【解决方案1】:

您只是将列权重应用于几列,因此最终会得到不相等的列宽。如果您希望所有列的大小相同,最简单的解决方案是赋予它们相同的权重和/或使用uniform 选项。

例如:

root.columnconfigure((0,1,2,3,4,5,6,7,8), weight=1)

【讨论】:

    猜你喜欢
    • 2020-12-22
    • 1970-01-01
    • 2019-05-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多