在Canvas tkinter上动态更改滚动条的长度

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在Canvas tkinter上动态更改滚动条的长度相关的知识,希望对你有一定的参考价值。

我用Python创建了一个程序,我通过urllib2调用请求一些html,然后将它打印在Canvas项目上。

HTML源代码很长,所以我尝试在我的画布上添加一个滚动条,但是在打印文本时不会出现这个

有没有办法让Scrollbar更改维度动态检测文本长度?先感谢您

这是我的源代码:

from tkinter import *
import urllib.request

def getURL():
    canvas.delete("all")

    with urllib.request.urlopen(entry.get()) as response:
        received_html = response.read()
    print(received_html)
    canvas.create_text(10,0,text=received_html, anchor=NW, width=700)

#Widget and item initialization
browser_window = Tk()
browser_window.geometry('900x700') # Size 900, 700
frame = Frame(browser_window) #frame
frame.pack(side=TOP, fill=BOTH, expand=5)
label = Label(frame, text= 'Inserisci URL:')
entry = Entry(frame)
canvas = Canvas(frame) #canvas
scrollbar = Scrollbar(frame, orient=VERTICAL, command=canvas.yview) 
#Scrollbar on my canvas


entry.insert(END, "http://jesolo.it")
#canvas configure
canvas.configure(yscrollcommand=scrollbar.set, background='#ffffff', 
scrollregion=canvas.bbox("all"))

button = Button(frame, text='Vai', command=getURL )



label.pack(side=TOP)
entry.pack(side=TOP)
button.pack(side=TOP)

scrollbar.pack(side=RIGHT, fill=Y) #Scrollbar pack
canvas.pack(side=LEFT, fill=BOTH, expand=5) #Canvas config
scrollbar.config(command=canvas.yview)

browser_window.mainloop()
答案

将文本添加到画布后,需要更新scrollregion属性,以便画布知道其虚拟空间应该可滚动多少。

def getURL():
    ...
    canvas.create_text(10,0,text=received_html, anchor=NW, width=700)
    canvas.configure(scrollregion=canvas.bbox("all"))

以上是关于在Canvas tkinter上动态更改滚动条的长度的主要内容,如果未能解决你的问题,请参考以下文章

Tkinter 如何正确设置组合框滚动条的样式

如何在 Tkinter 中获得带有滚动条的 Frame?

tkinter:在画布上使用滚动条

Python,Tkinter:如何在可滚动画布上获取坐标

canvas有有滚动条时,设置滚动条位置

更新 tkinter 中的滚动条