我在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")
答案 0 :(得分:2)
代码
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
画布现在是创建的并且是空的(因此bbox
方法返回None
)
使用
创建滚动条时scroll = Scrollbar(FrameBIG ,orient="vertical", command=Main.yview)
您忘了在scroll
和Main
之间完成两步合同,因此您必须在下面添加一行(在创建scroll
之后) )
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
画布是空的。让我们在Main
画布
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()
现在线路在那里,但滚动按钮还没有,为什么?
因为您必须更新scrollregion
画布的Main
。
让我们用
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()
在下一个问题中,发布一个问题,其中包含一个显示问题的完整工作代码。你会得到更快更好的答案,好吗? 祝你有愉快的一天。