我的代码有一个框架,框架内的画布,以及画布内的内框架 . 我想将Entry框放在内框中,并通过 pack_propagate(0)
将它们装到内框中,以避免使用Entry小部件_1378445的滚动功能进行像素/字体宽度转换 . 我想在内框架中的第一个和最后一个Entry小部件的上方和下方动态添加Entry小部件,我目前正在使用 pack(before=)
. 所以我想尽可能坚持包装工 .
如何让滚动条再次运行?以下最小工作示例已注释掉 frame.pack_propagate(0)
,因此Entry小部件的大小不正确:
import tkinter as tk
import tkinter.ttk as ttk
root = tk.Tk()
myframe = ttk.Frame(root)
myframe.pack()
sb = ttk.Scrollbar(myframe)
sb.pack(side=tk.RIGHT, fill=tk.Y, expand=1)
canvas = tk.Canvas(myframe, width=200, height=300,
scrollregion=(0, 0, 200, 300), yscrollcommand=sb.set)
canvas.pack()
frame = ttk.Frame(canvas, width=200, height=300) # inner Frame
canvas.create_window((0, 0), window=frame, anchor='nw')
sb.config(command=canvas.yview)
frame.bind("<Configure>", lambda event: canvas.configure(
scrollregion=canvas.bbox(tk.ALL)))
# frame.pack_propagate(0) # How to enable this and ensure scrollbar works?
s = tk.StringVar()
s.set("I'm a box")
for _ in range(100):
eb = ttk.Entry(frame, textvariable=s)
eb.pack()
root.mainloop()
编辑1:添加 StringVar()
并将 eb.grid()
更改为 eb.pack()
1 回答
请参阅将内部
Frame
调整为Canvas
的示例 - 它使用和内部方法
inner_resize()
完整的例子