python - Tkinter 网格填充空白空间

标签 python tkinter grid-layout

我在发布之前搜索了很多示例,但仍然无法正确使用 tkinter 网格。

我想要什么:

enter image description here

我的代码:

import tkinter as tk
from tkinter import ttk

root = tk.Tk()

b1 = ttk.Button(root, text='b1')
b1.grid(row=0, column=0, sticky=tk.W)

e1 = ttk.Entry(root)
e1.grid(row=0, column=1, sticky=tk.EW)

t = ttk.Treeview(root)
t.grid(row=1, column=0, sticky=tk.NSEW)

scroll = ttk.Scrollbar(root)
scroll.grid(row=1, column=1, sticky=tk.E+tk.NS)

scroll.configure(command=t.yview)
t.configure(yscrollcommand=scroll.set)

root.columnconfigure(0, weight=1)
root.columnconfigure(1, weight=1)
root.rowconfigure(1, weight=1)

root.mainloop()

最佳答案

快速简单的解决方案是定义treeviewcolumnspan。这将告诉 TreeView 分布在 2 列中,并允许输入字段位于您的按钮旁边。

在不相关的注释中,您可以为您的sticky 使用字符串,这样您就不必执行tk.E+tk.NS 之类的操作。而是简单地使用 "nse" 或您需要的任何指示。确保您按照 "nsew" 的顺序执行它们。

import tkinter as tk
from tkinter import ttk

root = tk.Tk()

b1 = ttk.Button(root, text='b1')
b1.grid(row=0, column=0, sticky="w")

e1 = ttk.Entry(root)
e1.grid(row=0, column=1, sticky="ew")

t = ttk.Treeview(root)
t.grid(row=1, column=0, columnspan=2, sticky="nsew") # columnspan=2 goes here.

scroll = ttk.Scrollbar(root)
scroll.grid(row=1, column=2, sticky="nse") # set this to column=2 so it sits in the correct spot.

scroll.configure(command=t.yview)
t.configure(yscrollcommand=scroll.set)

# root.columnconfigure(0, weight=1) Removing this line fixes the sizing issue with the entry field.
root.columnconfigure(1, weight=1)
root.rowconfigure(1, weight=1)

root.mainloop()

结果:

enter image description here

要解决您在评论中提到的问题,您可以删除 root.columnconfigure(0, weight=1) 以使条目正确展开。

enter image description here

关于python - Tkinter 网格填充空白空间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51973653/

相关文章:

python - Django 多站点

python - 过滤一个 numpy meshgrid

python - 在 Tkinter 中如何不断获取 slider 值

Java 组织的网格布局

java - 将 JPanel 放置在 JFrame 上

python - 检查字符串中是否存在列表元素

python - 将机器学习应用于猜谜游戏?

python - 在 Tkinter 中为一组小部件添加滚动条

python - 使用 tkinter 变量类作为类属性是不好的做法吗?

java - 将 ActionListener 添加到直接添加到容器中的按钮