Как обновить кадр tkinter и listBox после выполнения определенного действия?

У меня есть два списка на tkinter, то, что я хотел бы сделать, - это дважды щелкнуть элемент в одном списке, добавить его в список и показать его в другом списке. В настоящее время часть добавления в список работает, но по какой-то причине она не отображается в другом списке.

import tkinter as tk

testList = ["dog", "cat", "orange"]
newList = []

class SampleApp(tk.Tk):
    def __init__(self):
        tk.Tk.__init__(self)
        self._frame = HomePage

class HomePage(tk.Frame):
    def __init__(self, master):
        tk.Frame.__init__(self, master)
        self.config(width=300, bg='white', height=500, relief='sunken', borderwidth=2)

        self.reportNames = tk.StringVar(value=tuple(testList))
        self.lbox = tk.Listbox(self, listvariable=self.reportNames, height=15, width=50, borderwidth=2)
        self.lbox.pack()
        self.lbox.bind('<Double-1>', lambda x: addButton.invoke())

        addButton = tk.Button(self, text='Select', command=self.selection)
        addButton.pack()

        self.testNames = tk.StringVar(value=newList)
        self.lbox2 = tk.Listbox(self, listvariable=self.testNames, height=15, width=50, borderwidth=2)
        self.lbox2.pack()

    def selection(self):
        addThis = self.lbox.selection_get()
        print(self.lbox.selection_get())
        newList.append(addThis)
        print(newList)


if __name__ == "__main__":
    global app
    app = SampleApp()
    sidebar = HomePage(app)
    sidebar.pack(expand=False, fill='both', side='left', anchor='nw')
    app.geometry("1200x700")
    app.mainloop()

Всего 1 ответ


Ваши тестовые имена testNames не будут отслеживать изменения, внесенные в newList , вам нужно обновлять StringVar каждый раз newList изменении newList .

def selection(self):
    addThis = self.lbox.selection_get()
    print(self.lbox.selection_get())
    newList.append(addThis)
    print(newList)
    # update StringVar
    self.testNames.set(newList)

Есть идеи?

10000