主窗口最大化时自动调整列表框大小(Tk)

时间:2017-09-11 09:55:42

标签: tk

我正在使用列表框内的网格和列表框下方的3个按钮。当我最大化窗口时,它们保持不变,而我需要它们扩展。我不想用网格代替网格,因为我要使网格更加复杂,这对网格来说更简单。是否有可能扩展网格或使网格与包一起工作?感谢。

2 个答案:

答案 0 :(得分:1)

在父级调整大小时,您需要做两件事来扩展网格小部件。窗口小部件应使用 sticky 选项指定它应遵循的父容器的哪一侧。您还需要告诉父母如何在使用grid_columnconfiguregrid_rowconfigure方法更改大小时分配空间。

以下是网格列表框的示例。您应该尝试将粘性选项更改为空字符串以及北,东,南和西的各种其他组合,以查看会发生什么。还可以尝试注释掉grid_rowconfigure和grid_columnconfigure,看看它是如何影响事物的。

import tkinter as tk

def main():
    root = tk.Tk()
    listbox = tk.Listbox(root)
    listbox.grid(sticky='NEWS')
    root.grid_rowconfigure(0, weight=1)
    root.grid_columnconfigure(0, weight=1)
    root.mainloop()

if __name__ == '__main__':
    main()

为了说明这可以如何使用一些额外的小部件,这是另一个带右侧按钮的示例。列表框现在跨越3行,第三行(第2行)设置为在调整大小时获得额外的空间,以便按钮不会展开。

import tkinter as tk
import tkinter.ttk as ttk

def main():
    root = tk.Tk()
    listbox = tk.Listbox(root)
    listbox.grid(column=0, row=0, rowspan=3, sticky='NEWS')

    buttonOne = ttk.Button(root, text="One")
    buttonOne.grid(column=1, row=0, sticky='NE')
    buttonTwo = ttk.Button(root, text="Two")
    buttonTwo.grid(column=1, row=1, sticky='NE')

    root.grid_rowconfigure(2, weight=1)
    root.grid_columnconfigure(0, weight=1)
    root.mainloop()

if __name__ == '__main__':
    main()

答案 1 :(得分:0)

如果使用ans = input("enter input") print (([''] + ['hi'] * 999 + [''] * 4000) * (1 + (ans/5000)))[ans] 小部件没有正常增长或缩小的问题,通常是因为以下一个或两个因素:

  1. 小部件没有被告知“坚持”给予它的空间的两侧
  2. 主人没有被告知如何分配额外的空间
  3. 使用grid sticky选项可以解决第一个问题。例如:

    grid

    第二个问题与grid .listbox -row 0 -column 0 -sticky nsew 如何分配额外空间有关。默认情况下,它会留出额外的空间。它通过基于一行或多列 weight 分配额外空间来实现这一点,默认为0(零)。

    通过给行或列赋予正权重,您要求tk为该行和/或该列提供额外的空间。它获得的数量与其重量成正比。例如,如果一行的权重为1而另一行的权重为2,则权重为2的行将获得两倍于另一行的额外空间。

    作为使用网格时的经验法则,始终为至少一行和一列提供非零权重,以便使用任何额外空间。

    这是一个完整的例子。运行代码并调整窗口大小以查看所有内容的增长和缩小。接下来,注释掉最后四行并再次运行它以查看重量产生的效果。您可能还想尝试仅在中间列上设置权重。

    grid