Я пытаюсь создать приложение, которое позволит пользователю автоматически получать определения слов. Я делаю это, динамически создавая кнопки для каждого слова в тексте, и хочу добавить кнопки на полосу прокрутки.
Я могу отобразить полосу прокрутки, но в данный момент она не прокручивается. И все кнопки отображаются в вертикальной линии.
from wiktionaryparser import WiktionaryParser
import json
import re
from tkinter import *
parser = WiktionaryParser()
parser.set_default_language('french')
root = Tk()
list_words = []
menu = Menu(root)
root.config(menu=menu)
filemenu = Menu(menu)
langmenu = Menu(menu)
menu.add_cascade(label="Import", menu=filemenu)
scrollbar = Scrollbar(root)
scrollbar.pack(side=RIGHT, fill=Y)
def FromFile(): # Function for reading data from a text file
global list_words
root.filename = filedialog.askopenfilename(initialdir = "/",title = "Select file",filetypes = (("Text Files","*.txt"),("all files","*.*")))
UserFile = open(root.filename, 'r')
UserString = UserFile.read()
list_words = re.findall(r"[\w']+|[.,!?;]", UserString)
make_buttons()
filemenu.add_command(label="From File...", command=FromFile)
menu.add_cascade(label="Language", menu=langmenu)
# Menu that allows user to change the language
def lang_fr():
parser.set_default_language('french')
def lang_de():
parser.set_default_language('german')
def lang_es():
parser.set_default_language('spanish')
langmenu.add_command(label="French/Français", command=lang_fr)
langmenu.add_command(label="German/Deutsch", command=lang_de)
langmenu.add_command(label="Spanish/Espanol", command=lang_es)
# Gets the text from the button and returns the definiton
def get_widget(widget):
userInput = str(widget["text"])
listy = parser.fetch(userInput)
diction = listy[0]
defin = diction["definitions"]
defini = defin[0]
definitus = defini["text"]
definitus.pop(0)
window = Toplevel(root)
for definition in definitus:
print(definition)
var = 0
#Function that makes the buttons
def make_buttons():
global list_words
global var
for word in list_words:
btn = Button(root, text=word, bd=0)
btn["command"] = lambda widget=btn:get_widget(widget)
btn.pack(fill=BOTH, expand=1)
root.update()
root.mainloop()
В настоящее время вывод, как указано, имеет полосу прокрутки, которая не работает, и все кнопки находятся в вертикальной линии. Я хочу, чтобы полоса прокрутки и кнопки отображались построчно, как если бы пользователь читал обычный текст (как в книге).
Изображение с выхода:
