python - 如何在 tkinter 中自动包装小部件?

标签 python tkinter

几年前在android里看到过这个函数(layout?),但是想不起来这个函数名是什么...

我需要一个自动替换小部件。 如果新小部件的宽度达到窗口的末尾,我想将该小部件移到新行。

下面是我的预期输出。

enter image description here

enter image description here

我认为,获取宽度并计算新的小部件位置将解决它。 但是,我认为这是非常普遍的需求。 tkinter 支持吗?

最佳答案

由于 tkinter 有一个 Canvas ,可以让你绝对控制定位,你可以在添加项目时只用一点数学来完成这个。调整窗口大小时,您必须添加代码以重新定位小部件。

更简单的方法是使用文本小部件,它支持嵌入图像或小部件,并且支持换行。

这是一个演示:

import tkinter as tk

root = tk.Tk()
toolbar = tk.Frame(root)
text = tk.Text(root, wrap="word", yscrollcommand=lambda *args: vsb.set(*args))
vsb = tk.Scrollbar(root, command=text.yview)

toolbar.pack(side="top", fill="x")
vsb.pack(side="right", fill="y")
text.pack(side="left",fill="both", expand=True)

COUNT = 0
def add_widget():
    global COUNT
    COUNT += 1
    widget = tk.Label(root, width=12, text=f"Widget #{COUNT}", bd=1, relief="raised",
                      bg="#5C9BD5", foreground="white", padx=4, pady=4)
    text.configure(state="normal")
    text.window_create("insert", window=widget, padx=10, pady=10)
    text.configure(state="disabled")

add_button = tk.Button(toolbar, command=add_widget, text="Add")
add_button.pack(side="left")

for i in range(9):
    add_widget()

root.mainloop()

screenshot 3x3 widgets screenshot of expanded widget

关于python - 如何在 tkinter 中自动包装小部件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69846517/

相关文章:

python - 属性错误: Entry instance has no attribute '__len__'

python - 在 Tkinter 网格中插入新行

python - Sphinx - 生成对 Trac 票证和变更集的自动引用

python - 使用枚举的 Tkinter 下拉选项菜单

python - SQLAlchemy create_all() 不创建表

python - 我正在使用来自欧洲疾病预防控制中心的 Covid-19 数据集。我已经旋转了数据框,但似乎这些值是 bing 聚合的

python - 一段时间后关闭 tkinter 窗口

tkinter - 如何在 CentOS 6.4 版的 python 3.6 中安装 tkinter

python - 如何根据标题和列值合并两个数据框?

python selenium 远程 webdriver safari 驱动程序