尝试从循环中滚动两个列表框"for"卡住



我正在努力学习如何在Tkinter中创建更高级的小部件组合,但由于文档很少,我遇到了困难。每一帧都有一个日期和余额列表框,以及一个滚动条,该滚动条应该每帧滚动两个列表框。目前,每个滚动条只能通过鼠标中键或拖动滚动进行滚动。使用滚动条箭头什么也不做,每个列表框都是独立滚动的。我不确定我在下面的代码中做错了什么。

class BalanceLog:
def month(self):
month = [
['January', 31],
['February', 28],  # Check for leap year
['March', 31],
['April', 30],
['May', 31],
['June', 30],
['July', 31],
['August', 31],
['September', 30],
['October', 31],
['November', 30],
['December', 31]
]
year = 2020
mainFrame = tk.Frame(tkRoot)
mainFrame.config(bd=2, relief='groove')
mainFrame.grid(row=0, column=0, padx=70)
trxLabel = tk.Label(mainFrame, text='Transactions ' + str(year), font='courierNew 20 bold')
trxLabel.grid(row=0, columnspan=12, pady=(20, 0))
# Hold each month frame
self.monthFrame = []
self.dayList = []
self.endBalList = []
self.vScroll = []
for i in range(12):
monthLabel = tk.Label(mainFrame, text=month[i][0], font='courierNew 12 bold')
monthLabel.grid(row=1, column=i, pady=(20, 0))
self.monthFrame.append(tk.Frame(mainFrame))
self.monthFrame[i].config(bd=2, relief='groove')
self.monthFrame[i].grid(row=2, column=i, sticky=tk.W)
dayLabel = tk.Label(self.monthFrame[i], text='Day', font='courierNew 8 bold')
dayLabel.config(relief='raised')
dayLabel.grid(row=0, column=0, sticky=tk.W)
endBalLabel = tk.Label(self.monthFrame[i], text='Ending Balance', font='courierNew 8 bold')
endBalLabel.config(relief='raised')
endBalLabel.grid(row=0, column=1, sticky=tk.W)
self.dayList.append(tk.Listbox(self.monthFrame[i], width=3))
self.dayList[i].config(bd=2, relief='sunken')
self.dayList[i].grid(row=1, column=0, sticky=tk.W)
self.endBalList.append(tk.Listbox(self.monthFrame[i], width=16))
self.endBalList[i].config(bd=2, relief='raised', background='DARK GRAY')
self.endBalList[i].grid(row=1, column=1, sticky=tk.W)
self.vScroll.append(tk.Scrollbar(self.monthFrame[i], orient='vertical'))
self.vScroll[i].grid(row=1, column=2, sticky=(tk.N, tk.S, tk.E))
self.getFrame(idx=i)
# Insert data
for j in range(month[i][1]):
self.dayList[i].insert(tk.END, 1 + j)
self.endBalList[i].insert(tk.END, '999,999,999.99')
def getFrame(self, idx):
self.dayList[idx].config(yscrollcommand=self.vScroll[idx].set)
self.endBalList[idx].config(yscrollcommand=self.vScroll[idx].set)
self.scrollAll(idx)
def scrollAll(self, idx):
self.dayList[idx].yview(idx)
self.endBalList[idx].yview(idx)

您忘记为滚动条分配command选项。

以下是修改后的getFrame()scrollAll()功能:

def getFrame(self, idx):
self.dayList[idx].config(yscrollcommand=self.vScroll[idx].set)
self.endBalList[idx].config(yscrollcommand=self.vScroll[idx].set)
self.vScroll[idx].config(command=lambda *args: self.scrollAll(idx, *args))
def scrollAll(self, idx, *args):
self.dayList[idx].yview(*args)
self.endBalList[idx].yview(*args)

最新更新