如何在滚动条上添加按钮?

时间:2019-04-09 23:28:24

标签: python tkinter

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

我可以显示一个滚动条,但当前不滚动。而且所有按钮均显示为垂直线。

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

0 个答案:

没有答案