【问题标题】:Prevent Tkinter Text widget from resizing on font change防止 Tkinter Text 小部件在字体更改时调整大小
【发布时间】:2020-11-28 05:23:13
【问题描述】:

我尝试了其他答案的结果,但这并没有解决我的问题。

这是我正在使用的应用程序的屏幕截图:

上面,(带有>myIDLE文本的那个)是我的禁用状态的文本框。

当我减小字体并使用sticky="nsew" 方法时,它工作正常。但是,当我增加字体并使用相同的方法时,会发生这样的事情:

如何永久修复大小? 目前我正在这样声明尺寸:

from tkinter import *

root = Tk()
root.state('zoomed')
root.title("myIDLE Window")
root.iconbitmap(".\\resources\\images\\myIDLE.ico")
root.resizable(0, 0)

swidth = root.winfo_screenwidth()
sheight = root.winfo_screenheight()

mainf = Frame(root)
mainf.grid(row=0, column=0, padx=5, pady=7)
display = Text(mainf, height=int(33*(sheight/864)), width=int(112*(swidth/1536)))
display.grid(row=0, column=0)
root.mainloop()

我在一个答案中读到了一个类似的问题,可以使用.grid_propogate(False)

我使用它,结果如下:

  1. 在根窗口上:没有任何变化
  2. 在帧上 (mainf):屏幕变白
  3. 在文本小部件上:没有任何变化

请告诉我解决这个问题的方法 另外很抱歉我不能分享我的完整代码,但请随时询问代码的任何部分

【问题讨论】:

    标签: python-3.x tkinter


    【解决方案1】:

    如果您希望文本小部件具有特定的像素大小,则可以使用以下技术:

    1. 创建具有所需大小的框架
    2. 为此帧关闭几何传播
    3. 创建一个宽度为 1、高度为 1 的文本小部件,使用框架作为其主框架
    4. 将文本小部件添加到框架中,使其填满框架。
    5. 使用gridpackplace 将框架添加到您的应用中。

    以下示例将创建一个宽高为 400 像素的文本小部件。更改字体不会改变大小,因为它是控制文本小部件大小的框架,而不是控制框架大小的文本小部件。

    import tkinter as tk
    ...
    text_frame = tk.Frame(root, width=400, height=400)
    text_frame.pack_propagate(0)
    text = tk.Text(text_frame, width=1, height=1)
    text.pack(fill="both", expand=True, padx=20, pady=20)
    ...
    

    【讨论】:

    • 完美运行!这正是我想要的。谢谢:D
    猜你喜欢
    • 2012-04-07
    • 2017-10-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-07
    • 2014-04-02
    • 2011-05-18
    • 1970-01-01
    相关资源
    最近更新 更多