How to add a scrollbar to a window with tkinter?

python, tkinter

Solution

To add the scroll bars, use tkinter.tix.ScrolledWindow.

To remove extra space drop the extra "\n" and display a string, not a tuple. Here is the complete code:

import urllib.request
from tkinter import *
from tkinter.tix import *

root = Tk()
root.iconbitmap(default='icon.ico')
root.wm_title('Got Skills\' Skill Tracker')
frame = Frame(width="500",height="500")
frame.pack()
swin = ScrolledWindow(frame, width=500, height=500)
swin.pack()
win = swin.window


def show():
  name = "zezima"
  page = urllib.request.urlopen('http://hiscore.runescape.com/index_lite.ws?player=' + name)
  page = page.readlines()

  skills = []
  for line in page:
    skills.append([line.decode("utf-8").replace("\n", "").split(",")])

  skills = skills[0:25]

  for item in skills:
    toPrint = item[0][0],"-",item[0][1],"-",item[0][1]
    w = Message(win, text=' '.join(toPrint), width=500)
    w.pack()


menu = Menu(root)
root.config(menu=menu)

filemenu = Menu(menu)
menu.add_cascade(label="Commands", menu=filemenu)
filemenu.add_command(label="Show Skills", command=show)


root.mainloop()

Problem

I have a tkinter program: ``` import urllib.request from tkinter import * root = Tk() root.iconbitmap(default='icon.ico') root.wm_title('Got Skills\' Skill Tracker') frame = Frame(width="500",height="500") frame.pack() def show(): name = "zezima" page = urllib.request.urlopen('http://hiscore.runescape.com/index_lite.ws?player=' + name) page = page.readlines() skills = [] for line in page: skills.append([line.decode("utf-8").replace("\n", "").split(",")]) skills = skills[0:25] for item in skills: toPrint = item[0][0],"-",item[0][1],"-",item[0][1],"\n" w = Message(frame, text=toPrint) w.pack() menu = Menu(root) root.config(menu=menu) filemenu = Menu(menu) menu.add_cascade(label="Commands", menu=filemenu) filemenu.add_command(label="Show Skills", command=show) root.mainloop() ``` When I run the above script, it shows this (which is good): alt text http://img708.imageshack.us/img708/8821/tkinter1.png When I click Commands > Show Skills, it turns into this. (Linked because it's tall.) It shows the right thing, but...I can imagine you see the problem. Two questions: -How do I add a scrollbar to the frame, and keep the frame a fixed size? (Ideally, keep the size of the first image, add the output of show(), add a scrollbar to the first image of the program.) -With the following code: ``` for item in skills: toPrint = item[0][0],"-",item[0][1],"-",item[0][2],"\n" w = Message(frame, text=toPrint) w.pack() ``` Is that the best way to output what I'm outputting? The list (`skills`) looks like `[[1,2,3],[4,5,6]..]`, and I want to display 1-2-3 on a line, 4 - 5 - 6 on a line, etc. But, I don't want that extra line in between them like there is now, and I was wondering if how I did it is the best way to go about doing it.

Original source