我有 3 列动态内容。我希望每列占据窗口宽度的 1/3 并且可以调整大小。这不是问题:
from tkinter import *
from tkinter import ttk
root = Tk()
root.columnconfigure(0, weight=1)
root.columnconfigure(1, weight=1)
root.columnconfigure(2, weight=1)
ttk.Label(root, text='Hello World', width=1).grid(column=0, row=0, padx=2, sticky=(N,W,E))
ttk.Label(root, text='Some txt', width=1).grid(column=1, row=0, padx=2, sticky=(N,W,E))
ttk.Label(root, text='Yet some more text', width=1).grid(column=2, row=0, padx=2, sticky=(N,W,E))
root.geometry('400x600')
root.minsize(220,300)
root.mainloop()
问题是内容是动态的,因此可以是任何宽度 - 当窗口缩小到最小尺寸时,第 3 列不再适合。我想对文本进行换行,但需要这样做,以便在调整窗口大小时,文本将根据需要进行换行/展开。当我尝试这个时,我的主要问题是 wraptext 以文本单位为单位,而 width 以像素为单位,这意味着我无法编写自己的更新函数并在每次窗口时调用它已调整大小。
编辑:我不关心当我换行文本时窗口的垂直高度是多少
最佳答案
标签中文本的宽度以文本单位表示。 (找到 http://effbot.org/tkinterbook/label.htm )所以你能做的是
def display():
window_width = root.winfo_width() #get current screen width
wrapLen = screen_width/3
tkk.Label(root, text="Some Text", width= ? ,wraplength=wrapLen).grid(column = 0, row=0)
可以使用 if 语句根据 screen_width 来决定宽度,例如它看起来像
if window_width == 100:
width = 4.5
elif window_width == 300:
width = 13.5
这些值接近正确值。 我用 400 的宽度计算你可以得到一个标签 width=55 意味着它应该是
if screen_width == 400:
width = 18
如果您愿意,可以自己进行这些计算。
旁注
也作为你所做的旁注
from tkinter import *
它从 tkinter 导入所有内容。然后导入
from tkinter import ttk
它只是重新导入 ttk 位。
如果我是你,我就会这么做
import tkinter as tk
然后一切就变得
root = tk.Tk()
tk.Label()
tk.Button()
等等。
关于python - 如果文本大于列宽,tkinter 将自动换行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21802981/