Tkinter:将滚动条与画布相结合

2024-04-26 01:30:39 发布

您现在位置:Python中文网/ 问答频道 /正文

我知道这不是第一次有人问这样的问题,但即使在浏览了2个小时的互联网后,我还是无法让它工作:

因此,我尝试创建一个Tkinter框架,其中包含几个按钮(例如我拿了30个)。但是因为我的程序没有足够的空间,我需要在旁边添加一个滚动条,这样就可以滚动按钮了。你知道吗

我遇到的问题是,滚动条的内部“移动部分”和整个滚动条一样大,无法移动,我用scollregion=(0,0,1000,1000)解决了这个问题,但即使这样,滚动条的移动对画布也没有任何影响。你知道吗

下面是我从程序中提取的相应代码:

import Tkinter as tk

root = tk.Tk()
root.rowconfigure(0, weight=1)
root.columnconfigure(0, weight=50)
root.columnconfigure(1, weight=1)

root.minsize(300,400)
root.maxsize(300,400)

#Buttons
buttonFrame = tk.Canvas(root, bg='#bbb')
buttonFrame.grid(row=0, column=0, sticky=tk.N+tk.E+tk.S+tk.W)
buttonFrame.columnconfigure(0, weight=1)

scroll = tk.Scrollbar(root, command=buttonFrame.yview)
scroll.grid(row=0, column=1, sticky=tk.N+tk.E+tk.S+tk.W)
buttonFrame.configure(yscrollcommand=scroll.set)

for i in range(30):
    tk.Button(buttonFrame, text=str(i+1)).grid(row=i, column=0, sticky=tk.N+tk.E+tk.S+tk.W)

root.mainloop()

正如您(希望)看到的,滑块甚至不能移动,也不会改变画布上的任何内容,即使我在画布的某个地方挤压一个scrollregion=(bla)。你知道吗

2个问题: a、 )我需要添加(或删除)什么,以便在按钮列表中滚动 b、 )当我使滚动条成为buttonFrame而不是root的子对象时,a.的修复是否仍然有效?你知道吗


Tags: 程序tkinter画布columnroot按钮tkgrid
1条回答
网友
1楼 · 发布于 2024-04-26 01:30:39

要向画布添加小部件,必须使用create_window方法,而不是grid()。然后在设置滚动区域之前必须更新画布。你知道吗

for i in range(30):
    btn = tk.Button(buttonFrame, text=str(i+1))
    buttonFrame.create_window((100,i*50), window=btn)
root.update()
buttonFrame.config(scrollregion=buttonFrame.bbox("all"))

如果您尝试这样做,我怀疑这不是您想要的,因为create\u window方法需要绝对定位(您不能使用grid或pack)。这就是为什么大多数人把一个框架放在画布上,然后添加他们的小部件。许多人已经抽象出这个人造框架,它实际上是另一个框架including me中画布上的一个框架。你知道吗

相关问题 更多 >

    热门问题