我正在尝试使tkinter框架和Canvas停止扩展到无穷大并可以滚动。它们都超出了根窗口小部件的长度,即使我已将它们的两个高度值都手动设置为远小于屏幕尺寸。滚动条的块始终占据滚动条的整个区域,使其无用。你能告诉我我在做什么错吗?
我已经阅读了很多文档,多个教程,尝试以我能想到的每个合理顺序编辑和重新排列行,并尝试在其他十几个stackoverflow问答中应用解决方案,但没有任何改变。与第一次错误编码滚动条小部件时一样,我仍然遇到同样的问题。
这是一个最小的可重现示例:
import tkinter as tk
global rownum
rownum = 1
def sub_frame(root, f):
global rownum
f2 = tk.Frame(f)
f2.grid(row=rownum+1, sticky='nw')
tk.Label(f2, text='sub-frame'+str(rownum)).grid()
print('Label', rownum, 'created')
rownum += 1
root.update()
root = tk.Tk()
root_width = str(int(root.winfo_screenwidth()))
root_height = str(int(root.winfo_screenheight()))
root.geometry(root_width + 'x' + root_height)
c = tk.Canvas(root, height=500)
f = tk.Frame(c, height=500)
b = tk.Button(f, command=(lambda x=sub_frame: x(root, f)), text='subframe')
c.create_window(0, 0, window=f, anchor='nw')
s = tk.Scrollbar(c, orient='vertical', command=c.yview)
c.grid(row=1, column=1)
f.grid(row=1, column=1)
b.grid(row=1)
s.grid(row=1, column=2, sticky='ns')
root.update()
c.config(scrollregion=c.bbox('all'), yscrollcommand=s.set)
root.mainloop()
没有错误消息出现。我希望画布停止从屏幕底部延伸出来,并希望滚动条有用,而不是仅随画布一起延伸。