Как добавить полосу прокрутки в окно с помощью tkinter?

StackOverflow https://stackoverflow.com/questions/1844995

  •  12-09-2019
  •  | 
  •  

Вопрос

У меня есть программа 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()

Когда я запускаю приведенный выше скрипт, он показывает это (и это хорошо).:

альтернативный текст http://img708.imageshack.us/img708/8821/tkinter1.png

Когда я нажимаю Команды > Показать навыки, это превращается в это.(Связан, потому что он высокий.) Он показывает правильную вещь, но...Я могу представить, что вы видите проблему.

Два вопроса:

-Как мне добавить полосу прокрутки к рамке и сохранить рамку фиксированного размера?(В идеале, сохраните размер первого изображения, добавьте выходные данные 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 в строке и т.д.

Но я не хочу, чтобы между ними была такая дополнительная грань, как сейчас, и мне было интересно, является ли то, как я это сделал, лучшим способом добиться этого.

Это было полезно?

Решение

Чтобы добавить полосы прокрутки, используйте tkinter.tix.ScrolledWindow.

Чтобы убрать лишний пробел, уберите лишний " " и отобразите строку, а не кортеж.Вот полный код:

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()
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top