【问题标题】:Python/Tkinter: expanding fontsize dynamically to fill framePython/Tkinter:动态扩展字体大小以填充框架
【发布时间】:2014-08-17 21:32:47
【问题描述】:

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

对于文本的字体大小有什么相同的作用?目前我的文本是标签小部件的属性。标签小部件的父级是frameName

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

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

【问题讨论】:

    标签: python tkinter tk


    【解决方案1】:

    你可以使用 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

    【讨论】:

    • 好的,非常感谢您的回答。我唯一不清楚的是&lt;Configure&gt; 语法及其作用。
    • 抱歉这么晚才回复。 定义了一个事件。欲了解更多信息,您可以在这里查看:effbot.org/tkinterbook/tkinter-events-and-bindings.htm
    • size 选项采用 points 为单位的高度,而不是像素。要将大小解释为像素,您需要使用负值。
    【解决方案2】:

    我一直在试图弄清楚如何让文本在 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()
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-05-14
      • 1970-01-01
      • 1970-01-01
      • 2021-01-08
      • 1970-01-01
      • 2022-01-12
      • 2013-05-20
      • 2016-07-22
      相关资源
      最近更新 更多