如果您强制 GUI 窗口为特定大小,则更改文本小部件的字体不会导致文本小部件变大*。它通常有助于将文本小部件的宽度和高度设置为 1(一),这样当您更改字体时它甚至不会尝试增长。
- 好吧,小部件将try增长,但窗口的大小限制将防止小部件变得太大。
这是一个简单的例子。
import tkinter as tk
import tkinter.font as tkFont
class Example(object):
def __init__(self):
root = tk.Tk()
self.font = tkFont.Font(family="helvetica", size=18)
text = tk.Text(root, width=1, height=1, font=self.font)
button = tk.Button(root, text="Bigger", command=self.bigger)
button.pack(side="top")
text.pack(side="top", fill="both", expand=True)
text.insert("end", "Hello, world!")
# force the widow to a specific size after it's created
# so that it won't change size when we change the font
root.geometry("800x400")
def start(self):
tk.mainloop()
def bigger(self):
size = int(self.font.cget("size"))
size += 2
self.font.configure(size=size)
app = Example()
app.start()
通过将尺寸限制放在帧而不是根窗口上,相同的技术可以在较小的规模上工作。如果将文本小部件放入框架内,关闭几何传播,然后为框架指定固定大小,则小部件将不会增长。这是关闭几何传播有用的少数情况之一。
这是使用此技术对上述示例的修改:
import tkinter as tk
import tkinter.font as tkFont
class Example(object):
def __init__(self):
root = tk.Tk()
self.font = tkFont.Font(family="helvetica", size=18)
button = tk.Button(root, text="Bigger", command=self.bigger)
# create a frame for the text widget, and let it control the
# size by turning geometry propagation off
text_frame = tk.Frame(root, width=800, height=400)
text_frame.pack_propagate(False)
text = tk.Text(text_frame, width=1, height=1, font=self.font)
text.pack(side="top", fill="both", expand=True)
button.pack(side="top")
text_frame.pack(side="top", fill="both", expand=True)
text.insert("end", "Hello, world!")
def start(self):
tk.mainloop()
def bigger(self):
size = int(self.font.cget("size"))
size += 2
self.font.configure(size=size)
app = Example()
app.start()