阻止文本小部件更改字体大小的大小?

时间:2019-08-05 06:39:29

标签: python python-3.x tkinter widget

当我更改字体大小时,Tkinter的“ ScrolledText”小部件也会更改大小。对于“文本”小部件,此问题也仍然存在。

我通过使用建议的in this post使用'.grid_propagate(False)'解决了使用Text小部件的字体大小调整父框架大小的问题。

我在Text小部件上尝试了'.grid_propagate(False)'也无济于事。文本小部件仅在使用“ sticky = nsew”时保持相同大小,但会拉伸文本小部件以填充父框架。有什么办法可以解决这个问题?

import tkinter as tk
from tkinter.scrolledtext import ScrolledText
window = tk.Tk();
PW1 = tk.PanedWindow(master=window,orient='vertical',bg="#E0E0E0",bd=9)
PW1.pack(side='left',expand='True',fill='both')      
PW1.grid_propagate(False)              
PW1.grid_rowconfigure(0, weight=1)       
PW1.grid_columnconfigure(0, weight=1)
textField1 = ScrolledText(master=PW1,font=('Times New Roman',12))
textField1.grid(row=0, column=0, padx=5, pady=5,sticky='nsew')
window.mainloop()  

2 个答案:

答案 0 :(得分:0)

这是一个棘手的问题,而且我从未见过任何有关此工作原理的可用文档。但是,此线程中有一个提示:If the text changes the size of the the and widget changes the size

进行了大量的反复试验,最终我将其与using (Html.BeginForm("Index", "Home", FormMethod.Post, new { enctype = "multipart/form-data" , onsubmit = "javascript:return ValidateOnSubmit()" }))一起使用。 pack()失败了。

我不确定您打算如何使用grid(),因此我将提供一个使用PanedWindow()的示例:

Frame()

答案 1 :(得分:0)

一个简单的解决方案是给文本窗口小部件一个不自然的小尺寸(例如:1x1),然后让包含的窗口通过pack,{{1}确定窗口小部件的实际大小。 }或place几何管理器选项。只要请求的尺寸小于实际尺寸,用户就不会看到它的增长。

从技术上讲,该小部件仍会增长,但是除非您从字面上仅在GUI中为其指定了一个很小的位置,否则用户将不会看到它的增长,因为它要求的尺寸将始终小于实际尺寸。

这里是一个示例,以您的代码为起点。

grid

另一种解决方案是像您一样关闭包含文本窗口小部件的窗口小部件中的几何传播,然后使用该窗口小部件控制大小。不管文本小部件的大小是多少,它将是控制实际大小的包含小部件。

  

我在Text小部件上尝试了'.grid_propagate(False)'也无济于事。

这是因为import tkinter as tk from tkinter.scrolledtext import ScrolledText window = tk.Tk(); window.geometry("400x400") def set_font(size): textField1.configure(font=('Times new Roman', size)) f = tk.Frame(window) f.pack(side="bottom", fill="x") for size in (8, 12, 18, 24): b = tk.Button(f, text=size, width=2, command=lambda size=size: set_font(size)) b.pack(side="left") PW1 = tk.PanedWindow(master=window,orient='vertical',bg="#E0E0E0",bd=9) PW1.pack(side='left',expand='True',fill='both') PW1.grid_propagate(False) PW1.grid_rowconfigure(0, weight=1) PW1.grid_columnconfigure(0, weight=1) textField1 = ScrolledText(master=PW1,font=('Times New Roman',12), width=1, height=1) textField1.grid(row=0, column=0, padx=5, pady=5,sticky='nsew') window.mainloop() 影响子级如何影响小部件。由于您的文本小部件没有任何子级,因此该命令无效。