2009-12-04 135 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。 (因爲它很高,所以鏈接)它顯示正確的東西,但是...我可以想象你看到了這個問題。

兩個問題:

- 如何滾動條添加到框架,並保持架固定的尺寸? (理想情況下,保持第一圖像的大小,加秀(輸出),增加一個滾動條到程序的第一張圖像。) - 隨着下面的代碼:

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-2-3,在一條線上顯示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 2009-12-04 12:24:55

相關問題