【问题标题】:Scrollbar in Tkinter not scrolling listbox or deleting itTkinter 中的滚动条不滚动列表框或删除它
【发布时间】:2019-09-07 20:38:33
【问题描述】:

我正在尝试使用以下代码,但我遇到了问题,具体取决于我选择谁成为滚动条的主人。

我不知道该尝试什么,因为我找不到有类似问题的人。

fr = Frame(root)
fr.grid(row=0, column=0, sticky=N)
fr2 = Frame(root, height=34)
fr2.grid(row=0, column=1, sticky=N)

text_area = Listbox(fr2, width = 28, height= 34)
text_area.grid(row=0, column=0, rowspan=20)

sb = Scrollbar(fr2)
sb.grid(column=1, row=0)

text_area.config(font = ("Courier New", 12), yscrollcommand = sb)

如果我使用fr2 作为sb 的主人,我的滚动条会显得非常小并且无法滚动text_area(虽然我的鼠标滚轮和上/下键可以。)https://imgur.com/R5WDv87

如果我使用text_area 作为它的主人,但是text_area 会被简单地删除https://imgur.com/aXvH1J3

我该如何解决这个问题?

【问题讨论】:

    标签: python python-3.x tkinter listbox scrollbar


    【解决方案1】:

    你必须做两件事才能让滚动条工作:

    1. 必须配置滚动条的command选项才能调用要滚动的小部件的set方法
    2. 您必须配置小部件的yscrollcommand 选项才能更新滚动条。

    此外,列表框中没有任何内容,因此滚动条将不起作用,因为没有可滚动的内容。

    要让滚动条垂直填充空间,如果您使用grid,则需要使用sticky 选项。它还需要跨越与其控制的小部件相同数量的行,假设您希望它们具有相同的高度。

    这是一个基于您的代码的工作示例:

    from tkinter import *
    
    root = Tk()
    
    fr = Frame(root)
    fr.grid(row=0, column=0, sticky=N)
    fr2 = Frame(root, height=34)
    fr2.grid(row=0, column=1, sticky=N)
    
    text_area = Listbox(fr2, width = 28, height= 34)
    text_area.grid(row=0, column=0, rowspan=20)
    
    sb = Scrollbar(fr2, command=text_area.yview)
    sb.grid(column=1, row=0, sticky="ns", rowspan=20)
    
    text_area.config(font = ("Courier New", 12), yscrollcommand = sb.set)
    
    for i in range(100):
        text_area.insert("end", "item #{}".format(i))
    
    root.mainloop()
    

    【讨论】:

      猜你喜欢
      • 2015-04-03
      • 2016-07-07
      • 2020-04-28
      • 1970-01-01
      • 1970-01-01
      • 2017-09-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多