简体   繁体   English

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

[英]how increase font size in text widget?

When I increase the size of the font using following code, it also increase the size of the widget. 当我使用以下代码增加字体的大小时,它也会增加小部件的大小。 Is it possitlbe to increase font size by keeping the size of the text widget constant? 是否可以通过保持文本小部件的大小不变来增加字体大小? Thank You 谢谢

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

If you force the GUI window to be a specific size, then changing the font of a text widget won't cause the text widget to grow*. 如果强制GUI窗口为特定大小,则更改文本小部件的字体不会导致文本小部件增长*。 It usually helps to set the width and height of the text widget to 1 (one) so that it won't even try to grow when you change the font. 通常有助于将文本小部件的宽度和高度设置为1(一),以便在更改字体时甚至不会尝试增长。

  • well, the widget will try to grow, but the size constraint on the window will prevent the widget from getting too big. 好吧,小部件将尝试增长,但窗口上的大小约束将阻止小部件变得太大。

Here's a simple contrived example. 这是一个简单的人为例子。

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()

The same technique can work on a smaller scale by putting the size constraint on a frame rather than the root window. 通过将大小约束放在框架而不是根窗口上,相同的技术可以在较小的规模上工作。 If you put the text widget inside a frame, turn geometry propagation off, and then give the frame a fixed size, the widget will not grow. 如果将文本窗口小部件放在框架内,关闭几何体传播,然后为框架提供固定大小,窗口小部件将不会增长。 This is one of the few times when turning geometry propagation off can be useful. 这是关闭几何传播的少数几次之一。

Here's a modification of the above example, using this technique: 以下是使用此技术对上述示例的修改:

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()

Widget size is determined by font size, so width=10 for a small font is smaller than width=10 for a large font. 小部件大小由字体大小决定,因此对于大字体,小字体的宽度= 10小于宽度= 10。 The following code only changes the font size. 以下代码仅更改字体大小。

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()

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM