【问题标题】:How to set fixed width and height to widgets in tkinter?如何在 tkinter 中为小部件设置固定宽度和高度?
【发布时间】:2021-03-16 17:10:22
【问题描述】:

作为一个 Python 新手,我对文本小部件有疑问。

每当我尝试增加文本小部件的字体大小时,它的宽度和高度也会发生变化。

代码如下:

from tkinter import *
from tkinter import font

root = Tk()

fontsize = 16

def increase_font():
    global fontsize
    fontsize += 2
    textfont.config(size = fontsize)

textfont = font.Font(family = "consolas" , size = fontsize)
my_text = Text(root , width = 65 , height = 18 , font = textfont)
my_text.grid(row = 0 , column = 0)
my_text.insert(1.0 , "There is a problem")

my_button = Button(root , text = "Increase Font" , width = 13 , font = "arial 11" , command = increase_font)
my_button.grid(row = 1 , column = 0 , pady = 5)

mainloop()

但是,当我:
1) 在我的程序中使用标签
2) 更改我的文字的字体

例如:

def increase_font():
    global fontsize
    fontsize += 2
    my_text.tag_add("increase_size" , 1.0 , END) # using tags
    my_text.tag_config("increase_size" , font = f"consolas {fontsize}") # changing the font
    
    # Problem does not occur

或者

def increase_font():
    global fontsize
    fontsize += 2
    my_text.tag_add("increase_size", 1.0 , END) # using tags
    temp_font = textfont.copy() # creating a new font
    temp_font.config(size = fontsize)
    my_text.tag_config("increase_size" , font=temp_font) # changing the font

    # Problem does not occur

问题是我不想更改文本的字体或创建新字体,因为当我在原始程序上实现它时会导致问题。我想要的只是为我的文本小部件设置一个固定的宽度和高度(无论我用它做什么,它都不应该改变)。

这个问题真的让我很沮丧,如果有人能解决这个问题,那将是一个很大的帮助。

【问题讨论】:

    标签: python tkinter


    【解决方案1】:

    您可以在具有固定宽度和高度的Frame 和pack_propogate(0) 中pack Text 小部件和pack_propogate(0):

    from tkinter import *
    from tkinter import font
    
    root = Tk()
    
    fontsize = 16
    
    def increase_font():
        global fontsize
        fontsize += 2
        textfont.config(size=fontsize)
    
    # frame for the text widget
    container = Frame(root, width=600, height=400)
    container.pack(fill="both", expand=1)
    container.pack_propagate(0)
    
    textfont = font.Font(family = "consolas" , size = fontsize)
    # set the width and height of the Text widget to smallest values
    # and let the layout manager to expand it
    my_text = Text(container , width=1 , height=1 , font=textfont)
    my_text.pack(fill="both", expand=1) # fill the parent frame
    my_text.insert(1.0 , "There is a problem")
    
    my_button = Button(root , text="Increase Font" , width=13 , font="arial 11" , command=increase_font)
    my_button.pack(pady=5)
    
    mainloop()
    

    更新:在框架和按钮上使用grid():

    from tkinter import *
    from tkinter import font
    
    root = Tk()
    root.grid_rowconfigure(0, weight=1)
    root.grid_columnconfigure(0, weight=1)
    
    fontsize = 16
    
    def increase_font():
        global fontsize
        fontsize += 2
        textfont.config(size=fontsize)
    
    # frame for the text widget
    container = Frame(root, width=600, height=400)
    container.grid(row=0, column=0, sticky="nsew", padx=5, pady=5)
    container.pack_propagate(0)
    
    textfont = font.Font(family = "consolas" , size = fontsize)
    # set the width and height of the Text widget to smallest values
    # and let the layout manager to expand it
    my_text = Text(container , width=1 , height=1 , font=textfont)
    my_text.pack(fill="both", expand=1) # fill the parent frame
    my_text.insert(1.0 , "There is a problem")
    
    my_button = Button(root , text="Increase Font" , width=13 , font="arial 11" , command=increase_font)
    my_button.grid(row=1, column=0, pady=5)
    
    mainloop()
    

    【讨论】:

    • 您可以在框架和按钮上使用grid()。
    猜你喜欢
    • 2013-01-15
    • 1970-01-01
    • 2014-03-19
    • 1970-01-01
    • 1970-01-01
    • 2015-07-24
    • 1970-01-01
    • 1970-01-01
    • 2016-06-01
    相关资源
    最近更新 更多