为什么(python)tkinter Canvas和Frame对象扩展到无穷大,从而使Scrollbar无效?

时间:2019-06-14 14:08:13

标签: python canvas tkinter scrollbar frame

我正在尝试使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()

Here is an image of how the problem appears on my machine

没有错误消息出现。我希望画布停止从屏幕底部延伸出来,并希望滚动条有用,而不是仅随画布一起延伸。

0 个答案:

没有答案