How do I add a Scrollbar to a tkinter Text Widget using .grid method

Viewed 2950

I am trying to create a Scrollbar for my text widget however, I cannot seem to be able to grid() the scrollbar, thus the scrollbar does not appear on the text widget. Ignore what is in the variable Quote, it is just test data.

EventScrollBar= tk.Scrollbar(EventChoice)
EventText=tk.Text(EventChoice,height=25,width=50)
EventText.grid(row=3,column=1,columnspan=5)
EventScrollBar.config(command=EventText.yview)
EventText.config(yscrollcommand=EventScrollBar.set)
Quote=("""
...
wd""")
EventText.insert(tk.END,Quote)
EventText.config(state=tk.DISABLED)
2 Answers

I give you two ways of making a Scrollbar.

1) Using tk.Scrollbar

import tkinter as tk

root = tk.Tk()
EventText=tk.Text(root, height=10, width=50)
EventScrollBar= tk.Scrollbar(root, command=EventText.yview, orient="vertical")
EventScrollBar.grid(row=0, column=1, sticky="ns")
EventText.grid(row=0,column=0)
EventText.configure(yscrollcommand=EventScrollBar.set)
Quote=("""Suck\ne\ne\ne\ne\ne\ne\ne\ne\ne\nee\ne\ne\ne\ne\ne\ne\ne\nee\ned\ne\ne\nde\nd\ne\nded\nc\nc\nx\nc\nx\nc\nzc\ns\nds\nx\nwd\ns\nd\nwd""")
EventText.insert(tk.END,Quote)

root.mainloop()

2) Using ScrolledText

import tkinter as tk
from tkinter import scrolledtext

root = tk.Tk()
Quote=("""Suck\ne\ne\ne\ne\ne\ne\ne\ne\ne\nee\ne\ne\ne\ne\ne\ne\ne\nee\ned\ne\ne\nde\nd\ne\nded\nc\nc\nx\nc\nx\nc\nzc\ns\nds\nx\nwd\ns\nd\nwd""")
EventText = scrolledtext.ScrolledText(root, height=10, width=50)
EventText.insert("end", Quote)
EventText.grid(row=0, column=0)

root.mainloop()

enter image description here

Your code shows no attempt to grid the scrollbar.

See below example:

import tkinter as tk

root = tk.Tk()

ybar= tk.Scrollbar(root)
event_text=tk.Text(root, height=10, width=10)
ybar.config(command=event_text.yview)
event_text.config(yscrollcommand=ybar.set)

event_text.grid(row=0, column=0)
ybar.grid(row=0, column=1, sticky="ns")

for i in range(100):
    event_text.insert("end", "{}\n".format(i))

root.mainloop()

Just in case you are using grid() in your original code and forgot it here in your example your problem is likely due to the columnspan=5.

If you do that to your text widget then it will sit on top of your scrollbar.

Try something like this when using columnspan:

import tkinter as tk

root = tk.Tk()

ybar= tk.Scrollbar(root)
event_text=tk.Text(root, height=10, width=10)
ybar.config(command=event_text.yview)
event_text.config(yscrollcommand=ybar.set)

event_text.grid(row=0, column=0, columnspan=5)
ybar.grid(row=0, column=5, sticky="ns")

for i in range(100):
    event_text.insert("end", "{}\n".format(i))

root.mainloop()
Related