python - 如果文本大于列宽,tkinter 将自动换行

标签 python tkinter window-resize ttk

我有 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/

相关文章:

python - Selenium/python 2.7 如何查找只有标题的元素?

python - tkinter columconfigure 和 rowconfigure

python - 网格未按预期工作 python Tkinter

python - matplotlib barplot,在条形中间设置 xticklabels 的通用方法

Python:字典列表理解实例数

python - ttk 标签小部件中的多个图像

java - 在调整大小时缩放地址表单

javascript - 禁用浏览器调整大小时的滚动事件

ruby - 如何使用 Ruby 在 Selenium Webdriver 中调整当前窗口的大小?

python - 如何终止蝗虫负载测试中的特定线程