Tkinter Text组件调整字体大小但不改变组件尺寸的问题求助
Tkinter Text组件调整字体大小但保持组件尺寸不变的问题解决
问题原因
Tkinter的Text组件初始化时设置的width和height参数,是基于默认字体的字符数量/行数来计算的,并非固定像素尺寸。当你修改字体大小后,单个字符的像素宽高发生变化,组件会自动根据字符数重新计算实际显示尺寸,导致整个Text组件跟着缩放。
解决办法
方案1:用place布局固定像素尺寸
直接通过place()方法指定Text组件的固定像素宽高,替代pack(),这样无论字体大小如何变化,组件尺寸都保持固定:
from tkinter import * root = Tk() def font_size(value): # 用Scale传递的value参数,转成整数后设置字体大小 text.configure(font=("Comic Sans MS", int(value))) # 直接指定Text的像素位置和尺寸 text = Text(root) text.place(x=10, y=10, width=200, height=150) H_Scale = Scale(root, from_=1, to=72, orient=HORIZONTAL, command=font_size) H_Scale.place(x=10, y=170) root.geometry("400x240") root.mainloop()
方案2:用Frame包裹并固定尺寸
如果更习惯使用pack或grid布局,可以先创建一个固定尺寸的Frame,再将Text组件放入其中并铺满,同时禁止Frame随内部组件改变尺寸:
from tkinter import * root = Tk() def font_size(value): text.configure(font=("Comic Sans MS", int(value))) # 创建固定像素尺寸的Frame frame = Frame(root, width=200, height=150) frame.pack(padx=10, pady=10) # 关键:禁止Frame根据内部组件自动调整尺寸 frame.pack_propagate(False) # Text组件铺满整个Frame text = Text(frame) text.pack(fill=BOTH, expand=True) H_Scale = Scale(root, from_=1, to=72, orient=HORIZONTAL, command=font_size) H_Scale.pack(pady=5) root.geometry("400x240") root.mainloop()
小提示
Scale组件的command会自动将当前滑块值作为参数传递给绑定的函数,所以可以直接用value参数,不用再调用H_Scale.get(),代码更简洁。
内容的提问来源于stack exchange,提问作者Mohammad Eftekharian
相关产品推荐
相关产品推荐

