【问题标题】:Adjust scrollbar height in Tkinter?在 Tkinter 中调整滚动条高度?
【发布时间】:2018-08-23 02:11:06
【问题描述】:

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

【问题讨论】:

  • 请显示minimal reproducible example。我们无法调试我们看不到的代码。滚动条的最终高度是滚动条如何配置以及如何添加到窗口中的一个因素。
  • 我认为您正在尝试让滚动条在窗口正确的情况下更改大小?
  • 你用的是哪个版本的python? 2.x 还是 3.x? (您可以通过python --versionpython3 --version 获取版本)
  • 您的代码没有运行。请提供完整且实用的代码。

标签: python tkinter scrollbar


【解决方案1】:

代码

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()

现在行在那里但是滚动按钮还没有出现,为什么? 因为您必须更新Main 画布的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()

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-06-15
    • 1970-01-01
    • 2020-01-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多