Python 无法从“中滚动两个列表框”;至于;环

Python 无法从“中滚动两个列表框”;至于;环,python,tkinter,widget,Python,Tkinter,Widget,我正在努力学习如何在Tkinter中创建更高级的小部件组合,但由于文档很少,所以我遇到了困难。每一帧都有一个日期和余额列表框,以及一个滚动条,该滚动条应在每一帧滚动两个列表框。当前,每个滚动条仅通过鼠标中键或拖动滚动进行滚动。使用滚动条箭头不起任何作用,每个列表框都独立滚动。我不确定我在下面的代码中做错了什么 class BalanceLog: def month(self): month = [ ['January', 31],

我正在努力学习如何在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)

您忘记为滚动条指定
命令
选项

下面是修改的
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)

您忘记为滚动条指定
命令
选项

下面是修改的
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)


如果tkinter是您的GUI,为什么不用它标记您的问题呢<代码>用户界面没有告诉我们任何事情我更新了代码。请尝试将此代码减少到一个新的级别。看起来有一些代码不需要重现与列表框相关的问题。另外,您还没有为滚动条分配命令。如果滚动条在列表中,我无法将命令添加到滚动条。我将得到一个错误,如“'list'对象没有属性'config'”。re:“如果滚动条在列表中,我无法将命令添加到滚动条。”-当然可以。事实上,你正在使用一个列表并不重要。如果tkinter是你的GUI,为什么不用它来标记你的问题呢<代码>用户界面没有告诉我们任何事情我更新了代码。请尝试将此代码减少到一个新的级别。看起来有一些代码不需要重现与列表框相关的问题。另外,您还没有为滚动条分配命令。如果滚动条在列表中,我无法将命令添加到滚动条。我将得到一个错误,如“'list'对象没有属性'config'”。re:“如果滚动条在列表中,我无法将命令添加到滚动条。”-当然可以。事实上,你正在使用一个列表并不重要。哦,你太棒了,我已经在这个问题上坚持了好几个星期,它终于起作用了!对于更先进的Tkinter技术,您有没有推荐的指南或书籍?我看过的大多数教程似乎只涉及创建按钮之类的基本内容,但似乎没有一个真正涉及到链接小部件。我通常阅读参考文档。这也是一个学习tkinter使用技巧的好地方,因为有很多经验丰富的人都有很棒的想法。我知道在我之前的帖子中,你向我展示了如何将tkinter嵌入到一个类中。嵌入vs与我使用列表的方式有什么好处吗?使用OOP更容易设计和排除故障。当你滚动一个列表框时,另一个列表框不会滚动哦,你太棒了,我已经在这个问题上纠缠了好几个星期了,它终于起作用了!对于更先进的Tkinter技术,您有没有推荐的指南或书籍?我看过的大多数教程似乎只涉及创建按钮之类的基本内容,但似乎没有一个真正涉及到链接小部件。我通常阅读参考文档。这也是一个学习tkinter使用技巧的好地方,因为有很多经验丰富的人都有很棒的想法。我知道在我之前的帖子中,你向我展示了如何将tkinter嵌入到一个类中。嵌入列表与我使用列表的方式相比有什么好处吗?使用OOP更容易设计和排除故障。当您滚动一个列表框时,另一个列表框不会滚动