在Tkinter中调整滚动条高度?

问题描述 投票:0回答:1

我在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")
python tkinter scrollbar
1个回答
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()

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

© www.soinside.com 2019 - 2024. All rights reserved.