[英]Stop text widget from changing size with font size?
當我更改字體大小時,Tkinter的“ ScrolledText”小部件也會更改大小。 對於“文本”小部件,此問題也仍然存在。
如本文所建議的,我通過使用'.grid_propagate(False)'解決了使用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()
這是一個棘手的問題,而且我從未見過任何有關此工作原理的可用文檔。 但是,此線程中有一個提示: 如果文本更改的大小,而小部件更改的大小
經過大量的反復試驗,最終我將其與pack()
。 我沒有使用grid()
成功。
我不完全了解您打算如何使用PanedWindow()
因此我將提供一個使用Frame()
的示例:
import tkinter as tk
from tkinter.scrolledtext import ScrolledText
window = tk.Tk()
# Container will not expand when window gets bigger but will
# shrink as window gets smaller
container = tk.Frame(window, width=300, height=200, bg='tan')
container.pack()
container.pack_propagate(False)
# textField1 will not cause container size change
textField1 = ScrolledText(container,font=('Times New Roman',12))
textField1.pack(padx=5, pady=5)
# Changing font size for testing purposes
def change_font(event):
textField1.config(font=('Times New Roman',24))
window.bind('<space>', change_font)
window.mainloop()
一個簡單的解決方案是給文本窗口小部件一個不自然的小尺寸(例如: 1x1
),然后讓包含的窗口通過pack
, place
或grid
geometry manager選項確定窗口小部件的實際大小。 只要請求的大小小於實際大小,用戶就不會看到它的增長。
從技術上講,該小部件仍會增長,但是除非您從字面上僅在GUI中為其指定了一個很小的位置,否則用戶將不會看到它的增長,因為它要求的尺寸始終小於實際尺寸。
這是一個示例,以您的代碼為起點。
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()
另一個解決方案是像您一樣關閉包含文本窗口小部件的窗口小部件中的幾何傳播,然后使用該窗口小部件控制大小。 無論文本窗口小部件嘗試設置為什么大小,它都將是控制實際大小的包含窗口小部件。
我也嘗試在文本小部件上使用'.grid_propagate(False)'也無濟於事。
那是因為grid_propagate
影響孩子如何影響小部件。 由於您的文本小部件沒有任何子代,因此該命令無效。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.