如何在文本小部件中增加字体大小?

3

当我使用以下代码增加字体大小时,它也会增加小部件的大小。是否可能通过保持文本小部件的大小来增加字体大小呢? 谢谢

  A11 = tkinter.Text(top, height=28, width=70,background = "#02e0a1")
  labelfont = ('times', 20, 'bold')
  A11.config(font = labelfont)

如果你增加字体的大小,但保持小部件不变,那么字母将被切断,无法阅读。你为什么想要这样做呢? - Gumboy
@Gumboy:不一定。文本小部件具有自动换行长文本的功能,默认情况下会自动换行,除非您关闭此功能。 - Bryan Oakley
也许我没有正确理解问题,我认为如果您有一个4x4的框,而字母是6X5,那么尺寸不允许文本显示。因此,我现在假设@bibek希望小部件跟随文本的大小。 - Gumboy
你为什么会觉得 OP 希望小部件跟随文本大小,当问题明确地说“...通过保持文本小部件的大小恒定”? - Bryan Oakley
2个回答

7
如果你强制设置GUI窗口的大小,那么更改文本小部件的字体将不会导致文本小部件变大。通常最好将文本小部件的宽度和高度设置为1,这样即使在更改字体时它也不会试图变大。
好的,小部件会尝试变大,但是窗口上的大小限制将防止小部件变得太大。
以下是一个简单的构造示例。
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()

1
谢谢!这真的帮了我很多,因为我的文本小部件随着字体大小的增加变得非常大。我只是按照Bryan在他的答案中说的那样将其高度和宽度设置为1,然后将其填充设置为BOTH并展开到True。 - redbeam_

0
小部件的大小由字体大小决定,因此对于小字体,宽度为10的大小比大字体的宽度为10的大小要小。以下代码仅更改字体大小。
import sys
if sys.version_info[0] < 3:
    import Tkinter as tk     ## Python 2.x
else:
    import tkinter as tk     ## Python 3.x

class DifferentFonts():
    def __init__(self):
        self.top=tk.Tk()

        tk.Label(self.top, text="Small Font", width=10, bg="lightblue",
                font=('DejaVuSansMono', 10)).grid(row=1)
        tk.Label(self.top, text="Large Font", width=10, bg="lightyellow",
                 font=('DejaVuSansMono', 30)).grid(row=2)

        tk.Button(self.top, text="Quit", bg="orange",
               command=self.top.quit).grid(row=20)

        self.top.mainloop()

DifferentFonts()

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接