【发布时间】:2020-08-08 00:47:18
【问题描述】:
我正在尝试学习如何在 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)
【问题讨论】:
-
如果 tkinter 是您的 GUI,为什么不用它来标记您的问题。
user-interface什么也没告诉我们 -
我更新了代码。
-
请尝试将此代码缩减为minimal reproducible example。看起来有一些代码不是重现与列表框相关的问题所必需的。此外,您还没有为滚动条分配命令。
-
如果命令在列表中,我无法向滚动条添加命令。我会收到类似“'list' object has no attribute 'config'”的错误。
-
re: “如果它在列表中,我无法将命令添加到滚动条。” - 当然可以。您使用列表这一事实根本不重要。