2009-12-04 3 views
5

Ich habe ein tkinter Programm:Wie fügt man einem Fenster mit tkinter eine Bildlaufleiste hinzu?

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() 

Als ich das Skript ausführen, zeigt dies (was gut ist):

alt text http://img708.imageshack.us/img708/8821/tkinter1.png

Wenn ich Befehle> Show Fähigkeiten klicken, es stellt sich in this. (Verbunden, weil es groß ist.) Es zeigt das Richtige, aber ... Ich kann mir vorstellen, dass Sie das Problem sehen.

Zwei Fragen:

-Wie kann ich eine Scrollbar mit dem Rahmen, und halten den Rahmen eine feste Größe? (Idealerweise hält die Größe des ersten Bildes, fügen Sie die Ausgabe von show(), fügen Sie eine Bildlaufleiste auf das erste Bild des Programms.) -Mit den folgenden Code:

for item in skills: 
    toPrint = item[0][0],"-",item[0][1],"-",item[0][2],"\n" 
    w = Message(frame, text=toPrint) 
    w.pack() 

Ist das der beste Weg, ausgeben, was ich ausspiele? Die Liste (skills) sieht wie [[1,2,3],[4,5,6]..] aus, und ich möchte 1-2-3 auf einer Linie, 4 - 5 - 6 auf einer Linie usw. anzeigen.

Aber ich will diese Extralinie dazwischen nicht sie sind wie jetzt, und ich habe mich gefragt, ob ich es am besten machen könnte.

Antwort

7

Um die Bildlaufleisten hinzuzufügen, verwenden Sie tkinter.tix.ScrolledWindow.

Um zusätzlichen Speicherplatz zu entfernen, geben Sie den zusätzlichen "\ n" ein und zeigen Sie eine Zeichenfolge an, kein Tupel. Hier ist der vollständige 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() 
+0

Ich dachte, ich brauche das '\ n', damit sie nicht alle in derselben Zeile angezeigt werden. : P. Wie auch immer, vielen Dank. Es funktioniert gut. :) – Andrew