繁体   English   中英

tkinter,如何防止Text widget在更改字体和设置widget大小时调整大小?

[英]In tkinter, how to prevent Text widget from resizing when font is changed and set size for widget?


from tkinter import *

# main window
root = Tk()
root.state('zoomed')
root.geometry("1200x800")

frame_left = Frame(root, padx=10, pady=10)
frame_left.grid(column=0, row=0, columnspan=1) #buttons

# button_get = Button(frame_left, text="Grab posts").grid(column=0, row=0)

Button(frame_left, text="Hot", command=lambda: get_json(2, 0)).grid(column=0, row=2)
Button(frame_left, text="New", command=lambda: get_json(3, 0)).grid(column=0, row=3)
Button(frame_left, text="Controversial", command=lambda: get_json(0, 0)).grid(column=0, row=4)
Button(frame_left, text="Top today", command=lambda: get_json(6, 1)).grid(column=0, row=5)
Button(frame_left, text="Top week", command=lambda: get_json(6, 2)).grid(column=0, row=6)
Button(frame_left, text="Top month", command=lambda: get_json(6, 3)).grid(column=0, row=7)
Button(frame_left, text="Top year", command=lambda: get_json(6, 4)).grid(column=0, row=8)
Button(frame_left, text="Top all time", command=lambda: get_json(6, 5)).grid(column=0, row=9)

# separator = ttk.Separator(frame_left, orient="horizontal").grid(column=0, row=1)

for widget in frame_left.winfo_children():
    widget.grid(padx=8, pady=8, sticky="WE")

frame_right = Frame(root, padx=10, pady=10)
frame_right.grid(column=2, row=0, columnspan=2) #textbox

frame_center = Frame(root, padx=10, pady=10)
frame_center.grid(column=0, row=1) #listbox

listbox = Listbox(frame_center, width=40, height=20)
listbox.insert(0, "This list is currently empty. Click on some of the buttons on the left to grab new posts.")
listbox.grid(column=0, row=1)
listbox.bind('<<ListboxSelect>>', lambda x: get_story())

scrollbar = Scrollbar(frame_center, orient='horizontal', command=listbox.xview)
scrollbar.grid(row=2, column=0, sticky="WE")

reader_frame = Frame(frame_right, width=400, height=400)
reader_frame.grid_propagate(0)
reader_frame.grid(row=0, column=0)

reader = Text(reader_frame, wrap="word", width=1, height=1)
reader.grid(column=0, row=0)
reader.configure(state='disabled')

root.mainloop() 

每次我通过 function 更改字体时,字母的大小都会改变,但框只有 1 个字符宽。 在我之前的尝试中,我设法使 window 适合屏幕大小,直到更改字体和字体大小。

我试过这样做: Prevent Tkinter Text widget from resizing on font change This: How to stop Tkinter Text widget resize on font change? 还有这个: 在 tkinter 中使用 grid_propagate(False)

我的情况似乎没有任何效果,我是 Tkinter 的新手,现在我在这里呆了 2 天。

您需要调用reader_frame.grid_rowconfigure(0, weight=1)reader_frame.grid_columnconfigure(0, weight)reader_frame的所有可用空间分配给Text widget reader 您还需要将sticky="nsew"添加到reader.grid(...)以扩展小部件以填充可用空间:

...
reader_frame = Frame(frame_right, width=400, height=400)
reader_frame.grid_propagate(0)
reader_frame.grid(row=0, column=0)

# allocate all space of reader_frame to row 0 and column 0
reader_frame.grid_rowconfigure(0, weight=1)
reader_frame.grid_columnconfigure(0, weight=1)

reader = Text(reader_frame, wrap="word", width=1, height=1)
reader.grid(column=0, row=0, sticky="nsew") # expand to fill available space
...

但是,按照第一个发布链接的解决方案中的建议,使用.pack()更容易:

...
reader_frame = Frame(frame_right, width=400, height=400)
reader_frame.pack_propagate(0)
reader_frame.grid(row=0, column=0)

reader = Text(reader_frame, wrap="word", width=1, height=1)
reader.pack(fill="both", expand=True)
...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM