2009-12-04 13 views
5

私はTkinterのプログラムを持っている:私は上記のスクリプトを実行するとtkinterを使ってウィンドウにスクロールバーを追加するには?

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

、それは(良いです)、これを示しています

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

私はコマンド>ショースキルをクリックすると、それは変わりますthisに(それは背の高いのでリンクされています)それは正しいことを示していますが、...私はあなたが問題を見て想像することができます。

つの質問:

- どのように私は、フレームにスクロールバーを追加し、フレームに固定サイズを維持していますか? (理想的には、プログラムの最初の画像にスクロールバーを追加し、)ショーの出力を(追加、最初の画像のサイズを維持。) 次のコード-with:

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

ことが最善の方法です私が出力しているものを出力する?リスト(skills)は[[1,2,3],[4,5,6]..]のように見え、1行に1-2-3、1行に4〜5-6を表示したい。

しかし、私はその余分な行を間に入れたくない彼らは今のように、私はそれをやっていくための最良の方法だと思っていました。

答えて

7

スクロールバーを追加するには、tkinter.tix.ScrolledWindowを使用します。

余分なスペースを削除するには、余分な "\ n"を削除し、タプルではなく文字列を表示します。ここに完全なコードがあります:

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

私は、それらがすべて同じ行に表示されないようにするためには '\ n'が必要だと思いました。 :P。 とにかく、ありがとうございます。それはうまく動作します。 :) – Andrew

関連する問題