【问题标题】:How to scroll list box item upward and downward using buttons in python tkinter如何使用python tkinter中的按钮向上和向下滚动列表框项目
【发布时间】:2021-07-18 13:21:29
【问题描述】:

这是我的代码我想使用 tkinter 窗口右侧的两个按钮向上和向下滚动列表框中的项目我尝试了一些方法,他们确实选择了向上和向下的项目,但列表框没有向下滚动 (打开下面的图片以便更好地理解)

 from tkinter import *

root = Tk()
root.geometry('450x400')
root.config(bg='#083D77')


# making a frame on left of the window
fr = Frame(root)
fr.grid(row=0, column=0, columnspan=3, rowspan=4)

# LIST BOX INSIDE FRAME
lb = Listbox(fr, font=("Rockwell", 15, 'bold'), height=10, bg='#F4D35E', width=34, fg='#083D77')
lb.pack(side=LEFT, fill='both', expand='true')

for i in range(50):                  # item inside listbox
    lb.insert(i, 'This is sample data {}'.format(i+1))

# SCROLL BAR INSIDE FRAME
sbr = Scrollbar(fr, orient='vertical')
sbr.pack(side=RIGHT, fill='y')

# linking scrollbar and listbox toghter
sbr.config(command=lb.yview)
lb.config(yscrollcommand=sbr.set)

# UP ARROW DOWN ARROW BUTTON
up_arrow = Button(root, text="▲", fg='#F95738',)    # up arrow
up_arrow.grid(column=4, row=1, padx=5, sticky='s')

down_arrow = Button(root, text="▼", fg='#F95738')
down_arrow.grid(column=4, row=2, padx=5, sticky='n')


# select button

b1 = Button(root, font=("Rockwell", 15, 'bold'), text='SELECT', fg='red', border=2, relief='solid')
b1.grid(row=5, column=1, pady=5)
root.mainloop()

Click here to see the image of tkinter gui window

【问题讨论】:

  • 您是否尝试过使用<tkinter.Listbox>.see(index)?欲了解更多信息,请阅读this

标签: python user-interface tkinter listbox scrollbar


【解决方案1】:

我从另一个关于 stackflow 的问题中得到了答案

链接"https://stackoverflow.com/questions/3559673/how-to-scroll-an-inactive-tkinter-listbox"

现在我的代码看起来像这样来完成这项工作

    from tkinter import *

root = Tk()
root.geometry('450x400')
root.config(bg='#083D77')


def OnEntryDown():
    lb.yview_scroll(1, "units")


def OnEntryUp():
    lb.yview_scroll(-1, "units")


# making a frame on left of the window
fr = Frame(root)
fr.grid(row=0, column=0, columnspan=3, rowspan=4)

# LIST BOX INSIDE FRAME
lb = Listbox(fr, font=("Rockwell", 15, 'bold'), height=10, bg='#F4D35E', width=34, fg='#083D77')
lb.pack(side=LEFT, fill='both', expand='true')

for i in range(50):                  # item inside listbox
    lb.insert(i, 'This is sample data {}'.format(i+1))

# SCROLL BAR INSIDE FRAME
sbr = Scrollbar(fr, orient='vertical')
sbr.pack(side=RIGHT, fill='y')

# method for linking scrollbar and listbox
sbr.config(command=lb.yview)
lb.config(yscrollcommand=sbr.set)

# UP ARROW DOWN ARROW BUTTON
up_arrow = Button(root, text="▲", fg='#F95738',command=OnEntryUp)    # up arrow
up_arrow.grid(column=4, row=1, padx=5, sticky='s')

down_arrow = Button(root, text="▼", fg='#F95738',command=OnEntryDown)
down_arrow.grid(column=4, row=2, padx=5, sticky='n')

    

b1 = Button(root, font=("Rockwell", 15, 'bold'), text='SELECT', fg='red', border=2, relief='solid')
b1.grid(row=5, column=1, pady=5)
root.mainloop()

关注这两个新函数def OnEntryDown(): & def OnEntryUp():

也可以使用lambda函数

up_arrow = Button(root, text="▲", fg='#F95738',command=lambda: lb.yview_scroll(-1, "units"))    # up arrow
up_arrow.grid(column=4, row=1, padx=5, sticky='s')

down_arrow = Button(root, text="▼", fg='#F95738',command=lambda: lb.yview_scroll(1, "units"))
down_arrow.grid(column=4, row=2, padx=5, sticky='n')

【讨论】:

  • 您不需要global lb。这是完全没有必要的。
  • @TheLizzard 是的,你是对的,我编辑了代码,然后我使用了 lambda 函数。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-04-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-04-06
  • 1970-01-01
相关资源
最近更新 更多