有没有一个传统的,简单的方法使文本的字体大小选项在一个小部件,以适应?

2024-04-25 15:06:09 发布

您现在位置:Python中文网/ 问答频道 /正文

假设我有一个任意大小的按钮部件

  • 有没有一个传统的方法使它的文本符合或者说 按按钮新大小的比例调整大小?你知道吗

如果是,那是什么?你知道吗


Tags: 方法文本部件传统按钮比例
2条回答

基于herethis我得出了以下代码:

#! Python3

import tkinter as tk
from tkinter.font import Font

def resizeEvent(event, widget):
    #widget.unbind("<Configure>")

    #widget.grid_forget()

    widgetFont = Font(font=widget['font'])
    currentWidth = widget.winfo_width()
    currentHeight = widget.winfo_height()

    while ((widget.winfo_reqwidth() < currentWidth) and (widget.winfo_reqheight() < currentHeight)) and widgetFont['size'] > 1:
        widgetFont['size'] += 1
        widget['font'] = widgetFont

    while ((widget.winfo_reqwidth() > currentWidth) or (widget.winfo_reqheight() > currentHeight)) and widgetFont['size'] > 1:
        widgetFont['size'] -= 1
        widget['font'] = widgetFont

    widget['font'] = widgetFont

    #widget.bind("<Configure>", lambda event,  widget = widget : resizeEvent(event, widget))

def reqWidth(font, widget):
    return font.measure(widget['text'])

def reqHeight(font, widget):
    return font.metrics("linespace")

def font_resizable(widget, isResizable=True):
    if isResizable:
        widget.bind("<Configure>", lambda event,  widget = widget : resizeEvent(event, widget))

    else:
        widget.unbind("<Configure>")

if __name__ == "__main__":

    root = tk.Tk()
    frame = tk.Frame(root)
    frame.pack(fill="both", expand=True)
    frame.grid_rowconfigure(0, weight=1, uniform=True)
    frame.grid_rowconfigure(1, weight=1, uniform=True)
    frame.grid_columnconfigure(0, weight=1, uniform=True)

    button = tk.Entry(frame, text="A")
    button.grid(row=0, column=0, rowspan=1, sticky="nsew")

    button1 = tk.Button(frame, text="Dans et üstümde!")
    button1.grid(row=1, column=0, rowspan=5, sticky="nsew")

    font_resizable(button)
    font_resizable(button1)

    root.mainloop()

它不完全是理想的,在一些例子中表现不好,但是我想张贴这一点作为参考,或至少开始一点。你知道吗

不,没有什么内在的。您可能可以让它工作,但tkinter的设计方式正好相反:您指定文本,小部件将自动调整大小以适应需要。你知道吗

相关问题 更多 >