在Tkinter中调整滚动条高度?

时间:2018-03-14 13:53:56

标签: python tkinter scrollbar

我在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")

1 个答案:

答案 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)

您忘了在scrollMain之间完成两步合同,因此您必须在下面添加一行(在创建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()

在下一个问题中,发布一个问题,其中包含一个显示问题的完整工作代码。你会得到更快更好的答案,好吗? 祝你有愉快的一天。