python滚动条_python-Tkinter的画布和滚动条

我发现了与此相关的几个问题和答案,但是没有一个解决方案使我明白为什么此代码不起作用:

root=tk.Tk()

vscrollbar = tk.Scrollbar(root)

c= tk.Canvas(root,background = "#D2D2D2",yscrollcommand=vscrollbar.set)

vscrollbar.config(command=c.yview)

vscrollbar.pack(side=tk.LEFT, fill=tk.Y)

f=tk.Frame(c) #Create the frame which will hold the widgets

c.pack(side="left", fill="both", expand=True)

c.create_window(0,0,window=f)

testcontentA = tk.Label(f,wraplength=350 ,text=r"Det er en kendsgerning, at man bliver distraheret af læsbart indhold på en side, når man betragter dens websider, som stadig er på udviklingsstadiet. Der har været et utal af websider, som stadig er på udviklingsstadiet. Der har været et utal af variationer, som er opstået enten på grund af fejl og andre gange med vilje (som blandt andet et resultat af humor).")

testcontentB = tk.Button(f,text="anytext")

testcontentA.pack()

testcontentB.pack()

f.pack()

c.config(scrollregion=c.bbox("all"))

root.mainloop()

我有一个tkinter窗口,它具有动态生成的内容-这意味着如果要在屏幕上显示两个小部件,则需要能够向下滚动.我希望能够用小部件填充框架’f’,然后使用canvas.create_window()函数以可滚动的方式显示它.

现在,显示了该窗口,但未启用滚动条-就像滚动区域不正确,或者滚动条和画布之间的链接不正确.

解决方法:

如果要将框架嵌入画布中,则必须使用create_window而不是pack.第一步是删除f.pack().

其次,您需要在tkinter有机会显示小部件之后设置bbox,因为只有在将它们实际绘制在屏幕上之前才能计算它们的大小.

一种简单的实现方法是在调用c.config(scrollregion = c.bbox(“ all”))之前先调用root.update(),或者安排该命令与after_idle一起运行.

代码中的另一个错误(我假设…)是您在(0,0)处创建了窗口,但未设置锚点.这意味着当我猜测您希望左上角位于(0,0)时,内部框架将以(0,0)为中心.

将您的create_window调用更改为如下所示:

c.create_window(0,0,window=f, anchor='nw')

标签:python,tkinter,canvas,scrollbar

来源: https://codeday.me/bug/20191009/1881468.html

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值