我正在使用以下代码在tkinter Frame上填充Entry小部件:
import tkinter as tk
def populate(frame):
'''Put in some fake data'''
for row in range(100):
tk.Label(frame, text="%s" % row, width=3, borderwidth="1", relief="solid").grid(row=row, column=0)
tk.Entry(frame, width = 50).grid(row=row, column=1)
def onFrameConfigure(canvas):
'''Reset the scroll region to encompass the inner frame'''
canvas.configure(scrollregion=canvas.bbox("all"))
root = tk.Tk()
canvas = tk.Canvas(root, borderwidth=0)
frame = tk.Frame(canvas)
vsb = tk.Scrollbar(root, orient="vertical", command=canvas.yview)
canvas.configure(yscrollcommand=vsb.set)
vsb.pack(side="right", fill="y")
canvas.pack(side="left", fill="both", expand=True)
canvas.create_window((0,0), window=frame, anchor="nw")
frame.bind("<Configure>", lambda event, canvas=canvas: onFrameConfigure(canvas))
populate(frame)
root.mainloop()
我在上面的代码中面临的问题是,当我调整tkinter主窗口的大小时,Entry小部件没有根据窗口大小的变化自动调整自身大小。
有人可以帮我解决这个问题吗?
如果要在调整tkinter窗口的大小时调整条目的大小,则需要:
frame
时canvas
调整大小def on_canvas_resized(event):
canvas.itemconfig('frame', width=event.width)
...
canvas.bind('<Configure>', on_canvas_resized)
...
canvas.create_window((0,0), window=frame, anchor="nw", tag='frame') # added tag
Entry
水平填充可用空间def populate(frame):
'''Put in some fake data'''
for row in range(100):
tk.Label(frame, text="%s" % row, width=3, borderwidth="1", relief="solid").grid(row=row, column=0)
tk.Entry(frame, width = 50).grid(row=row, column=1, sticky='ew') # added sticky
...
frame.columnconfigure(1, weight=1) # make column 1 to fill available space horizontally
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句