Python / Tkinter:动态扩展fontsize以填充框架

时间:2014-06-26 21:27:25

标签: python tkinter tk

我知道您可以通过以下命令获取框架小部件以展开并填充其容器中可用的所有区域:frameName.pack(fill = 'both', expand = True)

对于文字的字体大小,它会做什么?目前我的文本是标签小部件的属性。标签小部件的父级是frameName

我想我可以定义自己的函数来调用labelName.config(fontsize = N)来更新字体大小,因为框架越大,但我不确定如何关联它们。

这就是我的程序现在的样子: 这些块中的每一个都是框架小部件。我希望文本扩展以填充框架的某些容量,并响应窗口的大小调整。

2 个答案:

答案 0 :(得分:2)

您可以使用tkFont.font

初始化标签时,将字体设置为变量,例如:

self.font = SOME_BASE_FONT
self.labelName.config(font = self.font)

然后你可以使用:

self.font = tkFont.Font(size = PIXEL_HEIGHT)

这可以缩放到标签的高度。您可以将'<Configure>'事件绑定到窗口小部件,并使您的回调函数调整标签大小。

frameName.bind('<Configure>', self.resize)

def resize(self, event):
    self.font = tkFont(size = widget_height)

有关详细信息,请参阅文档here

答案 1 :(得分:0)

我一直在尝试找出如何在tkinter中自动调整文本大小。

让它对我有用的关键是将计算出的高度分配给自定义字体对象中的大小。像这样:self.label_font['size'] = height

完整示例:

from tkinter import font
import tkinter as tk


class SimpleGUIExample:
    def __init__(self, master):
        self.master = master
        self.master.title("A simple Label")
        self.master.bind('<Configure>', self.resize)

        self.label_font = font.Font(self.master, family='Arial', size=12, weight='bold')

        self.label = tk.Label(self.master, text="Simple Label Resizing!")
        self.label.config(font=self.label_font)
        self.label.pack(fill=tk.BOTH, expand=tk.YES)

        self.close_button = tk.Button(self.master, text="Close", command=master.quit)
        self.close_button.pack()

    def resize(self, event):
        height = self.label.winfo_height()
        width = self.label.winfo_width()
        height = height // 2
        print('height %s' % height)
        print('width %s' % width)
        if height < 10 or width < 200:
            height = 10
        elif width < 400 and height > 20:
            height = 20
        elif width < 600 and height > 30:
            height = 30
        else:
            height = 40
        print('height %s' % height)

        self.label_font['size'] = height
        print(self.label_font.actual())


root = tk.Tk()
simple_gui = SimpleGUIExample(root)
root.mainloop()