我该如何改变字体大小以适应框架?(Tkinter,Python 3.10)

pb3s4cty  于 12个月前  发布在  Python
关注(0)|答案(2)|浏览(124)

我正在尝试改变字体大小,使文本适合框架。
当前代码:

import tkinter as tk

root = tk.Tk()

text = tk.Text(root, font="Courier", wrap=None)
text.pack(expand=True, fill="both")
text.insert("end", user_input_text)

root.mainloop()

字符串
显示文本基于用户输入,可以是任何长度。

v8wbuo2f

v8wbuo2f1#

这个方法“adjust_font_size”会在文本控件中的任何按键上被调用,并根据文本长度调整字体大小。最小和最大值已设置为8和20,但您可以根据需要调整这些。

import tkinter as tk

def adjust_font_size(event):
    # Calculate the new font size based on the text length
    text_length = len(text.get("1.0", "end-1c"))

    if text_length ==0:
        return

    new_font_size = max(8, min(20, int(20 / (text_length ** 0.3))))

    # Update the font size
    text.configure(font=("Courier", new_font_size))

root = tk.Tk()
root.geometry("600x400") # Set fixed window size

text = tk.Text(root, font=("Courier", 12), wrap=None)
text.pack(expand=True, fill="both")

# Bind the adjustment function to text modification events
text.bind("<KeyRelease>", adjust_font_size)

root.mainloop()

字符串

gudnpqoy

gudnpqoy2#

可以通过使用tkinter字体的度量和测量来缩放字体。
它是如何工作的:
myfont定义为fontsize变量。
字体尺寸宽和高是使用度量和指标提取的。
绑定到mytext通过'Configure'连接到grower
函数grower通过修改myfont['size']来处理字体更改。
这些更改将自动应用于mytext中的所有文本。
你可以通过改变字体大小和标量来进行实验。

import tkinter as tk
from tkinter import font

fontsize, scalar = 8, 1

app = tk.Tk()
# Enable grid manager to resize Text widget
app.rowconfigure(0, weight = 1)
app.columnconfigure(0, weight = 1)

myfont = font.Font(family = "consolas", size = fontsize)
wide = myfont.measure(0)
high = myfont.metrics("linespace")

mytext = tk.Text(
    app, width = 20, height = 6, font = myfont,
    tabs = 4 * wide, wrap = tk.NONE)
mytext.grid(sticky = tk.NSEW)

def grower(event):
    w, h = event.width, event.height
    try:

        myfont["size"] = int(w / wide / scalar)
        print(myfont.measure(0), myfont.metrics("linespace"))

    except ZeroDivisionError as err:
        print(f"{err}")

app.geometry("390x218")
mytext.bind("<Configure>", grower)

mytext.insert("1.0", f"Wide = {mytext.winfo_width()}\nHigh = {mytext.winfo_height()}\n")
app.mainloop()

字符串

相关问题