gpt4 book ai didi

python - 一起滚动多个 Tkinter 列表框

转载 作者:太空狗 更新时间:2023-10-29 20:36:49 27 4
gpt4 key购买 nike

我有多个 Tkinter 列表框,我使用单个滚动条一起滚动,但我也希望它们一起滚动以在任何列表框上进行鼠标滚轮事件。

如何做到这一点?

我当前的代码基于此处讨论的最后一个模式:http://effbot.org/tkinterbook/listbox.htm仅使用滚动条时效果很好,但使用鼠标滚轮时列表框独立滚动。

最佳答案

我知道这已经很老了,但我认为解决方案比这里提供的解决方案要简单一些。假设您总是希望列表框保持一致,那么以上两个答案甚至都不是完整的解决方案 - 通过箭头键更改选择将滚动一个列表框而不是另一个。

所以,看着答案,我问 - 为什么他们不 Hook yscrollcommand 回调,而不是直接将其发送到滚动条?所以,我就是这么做的:

try:
from Tkinter import *
except ImportError:
from tkinter import *


class MultipleScrollingListbox(Tk):

def __init__(self):
Tk.__init__(self)
self.title('Scrolling Multiple Listboxes')

#the shared scrollbar
self.scrollbar = Scrollbar(self, orient='vertical')

#note that yscrollcommand is set to a custom method for each listbox
self.list1 = Listbox(self, yscrollcommand=self.yscroll1)
self.list1.pack(fill='y', side='left')

self.list2 = Listbox(self, yscrollcommand=self.yscroll2)
self.list2.pack(expand=1, fill='both', side='left')

self.scrollbar.config(command=self.yview)
self.scrollbar.pack(side='right', fill='y')

#fill the listboxes with stuff
for x in xrange(30):
self.list1.insert('end', x)
self.list2.insert('end', x)

#I'm sure there's probably a slightly cleaner way to do it than this
#Nevertheless - whenever one listbox updates its vertical position,
#the method checks to make sure that the other one gets updated as well.
#Without the check, I *think* it might recurse infinitely.
#Never tested, though.
def yscroll1(self, *args):
if self.list2.yview() != self.list1.yview():
self.list2.yview_moveto(args[0])
self.scrollbar.set(*args)

def yscroll2(self, *args):
if self.list1.yview() != self.list2.yview():
self.list1.yview_moveto(args[0])
self.scrollbar.set(*args)

def yview(self, *args):
self.list1.yview(*args)
self.list2.yview(*args)


if __name__ == "__main__":
root = MultipleScrollingListbox()
root.mainloop()

关于python - 一起滚动多个 Tkinter 列表框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4066974/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com