如何在tkinter窗口中添加滚动条?

2024-04-28 04:30:47 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个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。(链接是因为它很高)它显示了正确的东西,但是……我可以想象你看到了问题。

两个问题:

-如何在框架中添加滚动条,并使框架保持固定大小?(理想情况下,保持第一个图像的大小,添加show()的输出,将滚动条添加到程序的第一个图像。) -使用以下代码:

  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,等等

但是,我不想让他们之间像现在这样有额外的界限,我想知道我是如何做到这一点的最好方法。


Tags: textin程序fortkintershowpageroot
1条回答
网友
1楼 · 发布于 2024-04-28 04:30:47

要添加滚动条,请使用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()

相关问题 更多 >