【问题标题】:Tkinter Label: Retain Height when I change font to smaller sizeTkinter 标签:当我将字体更改为较小尺寸时保持高度
【发布时间】:2015-07-24 13:37:08
【问题描述】:

我有一个 Label 用于一个相当高级的计算器应用程序。

我希望能够在输入的文本过长时更改字体大小,以便能够输入更多内容,但保留小部件的高度只是为了美观。

这是我试过的一段代码:

self.biglabelfont = font.Font(family = "Arial", size = 24, weight = "bold")

self.entrylabel = Label(... font = self.biglabelfont ....)
self.entrylabel.pack(side = LEFT, fill = "x", expand = True)
self.entrylabel.propagate(0)

self.biglabelfont = font.Font(family = "Arial", size = 11, weight = "bold")

self.entrylabel.config(font = self.biglabelfont)

但它一直在缩小高度。

【问题讨论】:

    标签: python-3.x fonts tkinter label


    【解决方案1】:

    您选择使用pack_propagate 是好的,但您做错了。您必须在标签小部件的 parent 上调用它,而不是在标签小部件上。

    这是一个工作示例。请注意,凹陷区域的高度不会随着字体的增大和缩小而改变。

    import Tkinter as tk
    import tkFont
    
    BG = "white"
    HEIGHT = 75
    def main():
        global the_font, root
    
        root = tk.Tk()
        the_font = tkFont.Font(family="helvetica", size=18)
    
        toolbar = make_toolbar(root)
        subframe = make_subframe(root)
    
        toolbar.pack(side="top", fill="x")
        subframe.pack(side="top", fill="x")
    
        root.geometry("400x400")
        root.mainloop()
    
    def make_subframe(parent):
        frame = tk.Frame(parent, height=HEIGHT, borderwidth=1, relief="sunken", background=BG)
        frame.pack_propagate(False)
    
        label = tk.Label(frame, font=the_font, text="0123455.67890", background=BG)
        label.pack(side="top", fill="both", expand=True)
        return frame
    
    def font_plus():
        size = the_font.cget("size")
        size += 2
        the_font.configure(size=size)
    
    def font_minus():
        size = the_font.cget("size")
        size -= 2
        the_font.configure(size=size)
    
    def make_toolbar(parent):
        toolbar = tk.Frame(root)
        grow = tk.Button(toolbar, text="Bigger", command=font_plus)
        shrink = tk.Button(toolbar, text="Smaller", command=font_minus)
        grow.pack(side="left")
        shrink.pack(side="left")
    
        return toolbar
    
    main()
    

    【讨论】:

    • 上述方法均未奏效,也许我做错了什么。不过,我找到了 99% 的解决方案。 pady 它不是像素精确的,但效果很好,但我对其他解决方案持开放态度。当我在框架上使用包传播并更改字体时,它会完全收缩并且大约 1 像素宽。
    • 我认为你的意思是行配置,其中第一个参数是最小大小,但无论出于何种原因,它都被忽略了。请告诉我你的想法的实际实现。我是初学者
    • 我是在父级还是标签上调用行配置?
    • @JozefMéry:我添加了一个使用 pack 的示例。
    • 我看到你的程序有效。我没有让我的工作。你能看看我的程序吗?我会尽量做到这一点,这样你就可以轻松地找到从我的源代码 600 行开始的地方,并且还有其他东西作为剪贴板操作的 pyperclip。谢谢
    猜你喜欢
    • 2021-12-04
    • 2011-11-05
    • 1970-01-01
    • 2015-05-07
    • 1970-01-01
    • 2020-06-14
    • 1970-01-01
    • 1970-01-01
    • 2017-03-15
    相关资源
    最近更新 更多