我一直在try 创建一个包含两个Text()个小部件的应用程序,当窗口大小改变时,这两个小部件都可以动态调整大小.之前我一直使用root.pack()管理器,fill='both'expand=True.

虽然这适用于LabelFrame和大多数其他小部件,但当Text小部件的大小小于其原始尺寸时,它不起作用.有没有办法动态调整Text个小部件的大小?

前任.

import tkinter as tk

window = tk.Tk()
editor = tk.Text(bg='red')
editor.pack(side='top',fill='both',expand=True)
output = tk.Text(bg='green')
output.pack(side='top',fill='both',expand=True)

window.mainloop()

推荐答案

Tkinter将try 满足文本小部件的要求大小.由于没有指定大小,文本小部件将请求80x24的大小.当你把窗口的大小调整得更小时,pack会试图按要求的大小为所有东西腾出空间,并且它会按堆叠顺序这样做.

随着窗口的缩小,第一个文本小部件的空间都有了,但两个都不够.因为没有足够的空间,它必须从剩余的小部件中减go 空间.因此,它开始删除最后一个文本小部件.

为了解决这个问题,您可以将文本窗口小部件的请求大小设置为一个小值,该值几乎适用于任何窗口大小,然后通过设置整个窗口的大小来强制它们增长.这样,pack将首先 for each 小窗口分配足够的空间,然后在有额外空间时将其平均扩展.

例如:

import tkinter as tk

window = tk.Tk()
window.geometry("400x400")

editor = tk.Text(bg='red', width=1, height=1)
output = tk.Text(bg='green', width=1, height=1)

editor.pack(side='top',fill='both',expand=True)
output.pack(side='top',fill='both',expand=True)

window.mainloop()

另一种解决方案是使用grid,它允许您指定行和列的大小应该一致.

import tkinter as tk

window = tk.Tk()

editor = tk.Text(bg='red')
output = tk.Text(bg='green')

editor.grid(row=0, column=0, sticky="nsew")
output.grid(row=1, column=0, sticky="nsew")

window.grid_columnconfigure(0, weight=1)
window.grid_rowconfigure((0,1), weight=1, uniform=1)

window.mainloop()

Python相关问答推荐

GL pygame无法让缓冲区与vertextPointer和colorPointer一起可靠地工作

如何使用Google Gemini API为单个提示生成多个响应?

Polars比较了两个预设-有没有方法在第一次不匹配时立即失败

什么相当于pytorch中的numpy累积ufunc

如何在Django基于类的视图中有效地使用UTE和RST HTIP方法?

如何在solve()之后获得症状上的等式的值

pandas:排序多级列

字符串合并语法在哪里记录

不能使用Gekko方程'

如何从比较函数生成ngroup?

如何使用matplotlib查看并列直方图

Polars时间戳同步延迟计算

时长超过24小时如何从Excel导入时长数据

如何在Python中创建仅包含完整天数的月份的列表

如何将列表从a迭代到z-以抓取数据并将其转换为DataFrame?

为什么在生成时间序列时,元组索引会超出范围?

当lambda函数作为参数传递时,pyo3执行

多个布尔条件的`jax.lax.cond`等效项

根据边界点的属性将图划分为子图

Django REST框架+Django Channel->;[Errno 111]连接调用失败(';127.0.0.1';,6379)