我有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()
问题是内容是动态的,因此可以是任何宽度 - 当窗口缩小到minsize列3时不再适合。我想要包装文本,但需要这样做,以便在调整窗口大小时,文本将根据需要进行包装/解包。我尝试这个时的主要问题是 wraptext 是文本单位而宽度是像素,这意味着我无法编写自己的更新函数并在每次窗口调用它调整大小。
编辑:我不关心当我包装文本时窗口的垂直高度是什么
答案 0 :(得分:2)
标签中文本的宽度以文本单位表示。 (找到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你可以得到一个标签宽度= 55,这意味着它应该是
if screen_width == 400:
width = 18
如果您愿意,请自行完成这些计算。
SIDE NOTE
也是你做的一面注意事项
from tkinter import *
从tkinter导入所有内容。然后导入
from tkinter import ttk
只是重新导入ttk位。
如果我是你,我会做的
import tkinter as tk
然后一切都变成了
root = tk.Tk()
tk.Label()
tk.Button()
等等。