我正在使用列表框内的网格和列表框下方的3个按钮。当我最大化窗口时,它们保持不变,而我需要它们扩展。我不想用网格代替网格,因为我要使网格更加复杂,这对网格来说更简单。是否有可能扩展网格或使网格与包一起工作?感谢。
答案 0 :(得分:1)
在父级调整大小时,您需要做两件事来扩展网格小部件。窗口小部件应使用 sticky 选项指定它应遵循的父容器的哪一侧。您还需要告诉父母如何在使用grid_columnconfigure
和grid_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]
小部件没有正常增长或缩小的问题,通常是因为以下一个或两个因素:
使用grid
sticky
选项可以解决第一个问题。例如:
grid
第二个问题与grid .listbox -row 0 -column 0 -sticky nsew
如何分配额外空间有关。默认情况下,它会留出额外的空间。它通过基于一行或多列 weight 分配额外空间来实现这一点,默认为0(零)。
通过给行或列赋予正权重,您要求tk为该行和/或该列提供额外的空间。它获得的数量与其重量成正比。例如,如果一行的权重为1而另一行的权重为2,则权重为2的行将获得两倍于另一行的额外空间。
作为使用网格时的经验法则,始终为至少一行和一列提供非零权重,以便使用任何额外空间。
这是一个完整的例子。运行代码并调整窗口大小以查看所有内容的增长和缩小。接下来,注释掉最后四行并再次运行它以查看重量产生的效果。您可能还想尝试仅在中间列上设置权重。
grid