代码之家  ›  专栏  ›  技术社区  ›  mimimi SNIPE

Tkinter如何设置滚动条

  •  0
  • mimimi SNIPE  · 技术社区  · 5 年前

    我今天开始使用Tkinter,遇到了一些问题。 我的目标是打开一个窗口,加载一个csv文件,并将列名作为按钮输出,将行作为每个值的标签输出。 现在,我希望能够向下滚动标签。

    我研究了这个主题,现在我明白了,在添加滚动条之前,我需要构建我的按钮和标签。 使用下面的代码,我无法滚动,滚动条会下降到列表的末尾(而不是窗口的末尾)。

    目前,我的输出如下: Output of window

    出现以下错误消息:

    TclError: unknown option "-yscrollcomand"
    

    我的代码:

    def open():
        # add new Window
        root1 = Toplevel()
        root1.title("this_is_a_first_try.csv")
        root1.iconbitmap("logo.ico")
        root1.configure(bg= "white")
        root1.geometry("1000x500")
    
        # add Data Frame
        data = pd.read_csv("this_is_a_first_try.csv")
        df = pd.DataFrame(data)
        #create canvas
        canvas_main = Canvas(root1, bg= "gray")
        canvas_main.grid(row= 2, column= 1, sticky= "news", columnspan= len(df.columns))
    
        for index,title in enumerate(df.columns): # generating Buttons for headers of column
            if index == 0:
                Button(canvas_main, text= "Index").grid(row= 2, column= 1, sticky= W+E) # generating header for index-column
            else:
                Button(canvas_main, text= title).grid(row= 2, column= index + 1, sticky= W+E)
        for index1, row in enumerate(df.values): # generating Label-Widgets for values
            for index2, value in enumerate(row):
                Label(canvas_main, text= value, anchor= W).grid(row= index1 + 3, column= index2 + 1, sticky= W+E)
    
    
        scrollbar = Scrollbar(root1, orient= "vertical", command= canvas_main.yview)
        scrollbar.grid(row= 2, column= len(df.columns) + 1, sticky= "ns")
        canvas_main.configure(yscrollcomand= scrollbar.set)
    

    我在互联网上找不到任何解决方案, 如果有人能给我一个提示,我将不胜感激。

    提前感谢。

    0 回复  |  直到 5 年前
        1
  •  1
  •   10 Rep    5 年前

    您可以使用列表框。下面是一个简单的列表框示例:

    from tkinter import *
    window = Tk()
    
    window.geometry("500x500")
    s = Scrollbar(window)
    s.pack(side = RIGHT, fill = Y)
    l = Listbox(window, height = 500, width = 500)
    l.pack()
    
    
    for i in range(1000):
        l.insert(END, i)
    
    l.config(yscrollcommand = s.set)
    s.config(command = l.yview)
    window.mainloop()
    

    您可以获取.csv文件中的所有元素,然后将它们放入列表中。然后,只需使用for循环将所有元素插入到列表框中,就完成了!!

    希望这能有所帮助!