如何解决在tkinter中调整Entry Widget大小的问题
我正在使用以下代码在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
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。