我在 Tkinter 中创建了一个滚动条,它工作正常,但滚动按钮的大小未正确缩放(通常它会调整为可滚动区域的大小)。
我将所有小部件都放在 .pack() 中,因此我想避免使用 .grid 粘性配置。
我的问题是:滚动条配置的哪一部分负责缩放高度?
代码示例:
master = Tk()
FrameBIG = Frame(master)
Main = Canvas(FrameBIG,height = 1200,width =1500,scrollregion=Main.bbox("all"))
scroll = Scrollbar(FrameBIG ,orient="vertical", command=Main.yview)
scroll.pack(side="right", fill="y")
Main.pack(side = BOTTOM, anchor = NW,fill="x")
FrameBIG.pack(anchor = W, fill = "x")
最佳答案
代码
Main = Canvas(FrameBIG,height=1200,width=1500,scrollregion=Main.bbox("all"))
是错误的,因为 Main
尚不存在。应该是
Main = Canvas(FrameBIG,background="blue", height = 500,width =500)
Main.configure(scrollregion=Main.bbox("all"))
但这毫无意义,因为 Main
Canvas 现在已创建并且是空的(因此 bbox
方法返回 None
)
当您使用以下命令创建滚动条时
scroll = Scrollbar(FrameBIG ,orient="vertical", command=Main.yview)
您忘记完成 scroll
和 Main
之间的两步契约,因此您必须添加以下行(就在创建之后) 滚动
)
Main.configure(yscrollcommand=scroll.set)
现在代码是这样的
from tkinter import *
master = Tk()
FrameBIG = Frame(master)
Main = Canvas(FrameBIG,background="blue", height = 500,width =500)
Main.configure(scrollregion=Main.bbox("all"))
scroll = Scrollbar(FrameBIG ,orient="vertical", command=Main.yview)
Main.configure(yscrollcommand=scroll.set)
scroll.pack(side="right", fill="y")
Main.pack(side = BOTTOM, anchor = NW,fill="x")
FrameBIG.pack(anchor = W, fill = "x")
master.mainloop()
现在您可以注意到滚动条没有按钮。这是因为 Main
Canvas 是空的。让我们向 Main
Canvas 添加一些内容
FrameBIG.pack(anchor = W, fill = "x")
# creates a diagonal from coordinates (0,0) to (500,1000)
Main.create_line(0, 0, 500, 1000)
master.mainloop()
现在该行已存在,但滚动按钮尚未存在,为什么?
因为您必须更新 Main
Canvas 的 scrollregion
。
那么让我们这样做吧
FrameBIG.pack(anchor = W, fill = "x")
Main.create_line(0, 0, 500, 1000)
Main.configure(scrollregion=Main.bbox("all"))
master.mainloop()
现在可以正常工作了。 这是完整的代码。
from tkinter import *
master = Tk()
FrameBIG = Frame(master)
Main = Canvas(FrameBIG,background="blue", height = 500,width =500)
Main.configure(scrollregion=Main.bbox("all"))
scroll = Scrollbar(FrameBIG ,orient="vertical", command=Main.yview)
Main.configure(yscrollcommand=scroll.set)
scroll.pack(side="right", fill="y")
Main.pack(side = BOTTOM, anchor = NW,fill="x")
FrameBIG.pack(anchor = W, fill = "x")
Main.create_line(0, 0, 500, 1000)
Main.configure(scrollregion=Main.bbox("all"))
master.mainloop()
在下一个问题中,发布一个问题,其中包含显示您问题的完整工作代码。您会得到更快更好的答案,好吗? 祝你有美好的一天。
关于python - 在 Tkinter 中调整滚动条高度?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49279580/