如何使用python tkinter中的按钮向上和向下滚动列表框项目



这是我的代码。我想使用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()

单击此处查看tkinter-gui窗口的图像

我从堆叠流的另一个问题中得到了答案

链接";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')

最新更新