【发布时间】:2015-06-05 10:38:06
【问题描述】:
我正在制作一个带有 Tkinter GUI 的 python 应用程序。到目前为止,它有一些动态创建的列表框,我会将它们全部链接到一个滚动条。我需要一种方法让yscroll() 知道哪个列表框已被滚动。将i 变量传递给yscroll() 不起作用。
from Tkinter import *
class MyApp(Tk):
def __init__(self):
Tk.__init__(self)
self.title(' - My App - ')
self.listboxes = []
for i in xrange(5):
lb = Listbox(self, yscrollcommand=lambda i, *args: self.yscroll(i, *args))
for x in xrange(30):
lb.insert('end', x)
lb.pack(fill='y', side='left')
self.listboxes.append( lb )
self.scrollbar = Scrollbar(self, orient='vertical')
self.scrollbar.pack(side='right', fill='y')
def yscroll(self, i, *args):
print i
print args
ma = MyApp()
ma.mainloop()
【问题讨论】:
-
TL;DR:试试
yscrollcommand=lambda i=i, *args: ... -
您的建议
yscrollcommand=lambda i=i, *args: ...无效,但lb = eval( 'Listbox(self, yscrollcommand=lambda *args: ma.yscroll(%d, *args) )' % i )有效。有更清洁的解决方案吗? -
你看过例如effbot.org/tkinterbook/listbox.htm?这给出了一个使用一个滚动条滚动多个列表框的方法。
-
是的,但这些列表框不是动态创建的
-
我不明白为什么会有问题;只需在
yview中迭代self.listboxes。