如何向滚动条添加按钮?

2024-10-03 19:23:52 发布

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

我正在尝试创建一个应用程序,允许用户自动获取单词的定义。我通过动态地为文本中的每个单词创建一个按钮来实现这一点,我想将这些按钮添加到滚动条中

我可以得到一个滚动条出现,但它不滚动当前。所有的按钮都出现在一条垂直线上

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

目前,所述的输出有一个不起作用的滚动条,所有的按钮都在一条垂直线上。我想要一个滚动条和按钮出现在一行一行的形式,好像用户正在阅读正常的文本(如在一本书)

输出图像: enter image description here


Tags: textaddparserlangdefrootwidget按钮