python - 在 Tkinter 中调整滚动条高度?

标签 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")

最佳答案

代码

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)

您忘记完成 scrollMain 之间的两步契约,因此您必须添加以下行(就在创建之后) 滚动)

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/

相关文章:

python - 运行 Python 文件时 VS Code 错误 22

python - 如何进行线程安全字典操作

Python tkinter 通过按钮添加新字段

android - 文本在线性布局的 edittext 内滚动,在 android 的 ScrollView 中

python - Python中不同十六进制类型/表示之间的区别

python - 重新加载功能无法删除已删除的变量

python - 如何更改列表框项目的文本?

python - 如何访问触发跟踪回调的特定 tkinter StringVar?

javascript - 带有许多无序列表项的溢出 div 区域

css - 媒体查询和滚动条宽度