仅当文本长度大于文本区域时才创建滚动条

时间:2014-10-06 21:39:45

标签: python python-3.x tkinter

以下是一些简单的代码:

from tkinter import *
from tkinter import ttk

rootwin = Tk()

roomtext = Text(rootwin)
roomtext.pack(side = 'left', fill = "both", expand = True)

rtas = ttk.Scrollbar(roomtext, orient = "vertical", command = roomtext.yview)
rtas.pack(side = "right" , fill = "both")

roomtext.config(yscrollcommand = rtas.set)

rootwin.mainloop()

因此,默认scrollbar会立即出现。 如果输入的文本大于文本区域,如何才能显示scrollbar

因此,当我运行代码时,首先,scrollbar必须不显示。然后,当输入足够的文本时scrollbar显示(即roomtext中的文字长于roomtext区域)。

1 个答案:

答案 0 :(得分:2)

也许这个代码就是你要找的东西(因为我对它更熟悉所以改为打包到网格......如果你愿意的话,你应该能够轻松地恢复它):

from tkinter import *
from tkinter import ttk

rootwin = Tk()

roomtext = Text(rootwin)
roomtext.grid(column=0, row=0)

def create_scrollbar():
    if roomtext.cget('height') < int(roomtext.index('end-1c').split('.')[0]):
        rtas = ttk.Scrollbar(rootwin, orient = "vertical", command = roomtext.yview)
        rtas.grid(column=1, row=0, sticky=N+S)
        roomtext.config(yscrollcommand = rtas.set)
    else:
        rootwin.after(100, create_scrollbar)

create_scrollbar()
rootwin.mainloop()

它检查是否需要每秒创建一次滚动条10次。 通过一些额外的更改,您甚至可以在不再需要时删除滚动条(文本太短):

from tkinter import *
from tkinter import ttk

rootwin = Tk()

roomtext = Text(rootwin)
roomtext.grid(column=0, row=0)

rtas = ttk.Scrollbar(rootwin, orient = "vertical", command = roomtext.yview)

def show_scrollbar():
    if roomtext.cget('height') < int(roomtext.index('end-1c').split('.')[0]):
        rtas.grid(column=1, row=0, sticky=N+S)
        roomtext.config(yscrollcommand = rtas.set)
        rootwin.after(100, hide_scrollbar)
    else:
        rootwin.after(100, show_scrollbar)

def hide_scrollbar():
    if roomtext.cget('height') >= int(roomtext.index('end-1c').split('.')[0]):
        rtas.grid_forget()
        roomtext.config(yscrollcommand = None)
        rootwin.after(100, show_scrollbar)
    else:
        rootwin.after(100, hide_scrollbar)

show_scrollbar()
rootwin.mainloop()