在Tkinter Python中将treeview数据从一个窗口传递到另一个窗口

在Tkinter Python中将treeview数据从一个窗口传递到另一个窗口,python,tkinter,Python,Tkinter,大家好! 这里的问题是,当我想将数据从一个窗口的树视图传递到另一个窗口的树视图时,会出现问题,因为第二个树视图的选定行在第一个树视图的所有行中重复。 另一个问题是,如何在现有行中插入,例如,从索引为5的列开始 我的两项职能: def createTable(): idAuthor = inputId.get() result_object = get_publisher(idAuthor) author=result_object['author'] docume

大家好! 这里的问题是,当我想将数据从一个窗口的树视图传递到另一个窗口的树视图时,会出现问题,因为第二个树视图的选定行在第一个树视图的所有行中重复。 另一个问题是,如何在现有行中插入,例如,从索引为5的列开始 我的两项职能:

def createTable():
    idAuthor = inputId.get()
    result_object = get_publisher(idAuthor)
    author=result_object['author']
    documents=result_object['documents']
    nameAuthor=author.name;
    numberDocuments=author.number_documents
    numberCitations=author.citations
    hIndex=author.h_index
    organization=author.organization
    root = Tk()
    root.geometry("1200x600+20+20")
    #root.resizable(False,False) 
    root.title(author.name)
    frame8=Frame(master=root,width=1100,height=175,bg='blue')
    frame8.place(x=50,y=0)
    authorName_label=Label(master=frame8,text="Full name : " + nameAuthor,bg='blue',fg='white',font=(None,14)).place(x=60,y=20)
    numberDocuments_label=Label(master=frame8,text="Number of documents : " + numberDocuments,bg='blue',fg='white',font=(None,14)).place(x=600,y=20)
    numberCitations_label=Label(master=frame8,text="Number of citations : " +numberCitations,bg='blue',fg='white',font=(None,14)).place(x=60,y=60)
    hindex_label=Label(master=frame8,text="H-index : "+hIndex,bg='blue',fg='white',font=(None,14)).place(x=600,y=60)
    organization_label=Label(master=frame8,text="Organization : " +organization,bg='blue',fg='white',font=(None,14)).place(x=60,y=120)
    tv=ttk.Treeview(root,columns=(1,2,3,4,5,6,7,8,9),show="headings",height="12")
    tv.place(x=85,y=200)
    tv.heading(1,text="Type")
    tv.column(1, minwidth=0, width=100, stretch=NO)
    tv.heading(2,text="Title")
    tv.column(2, minwidth=0, width=150, stretch=NO)
    tv.heading(3,text="Authors")
    tv.column(3, minwidth=0, width=150, stretch=NO)
    tv.heading(4,text="Magazine")
    tv.column(4, minwidth=0, width=150, stretch=NO)
    tv.heading(5,text="Date")
    tv.column(5, minwidth=0, width=150, stretch=NO)
    tv.heading(6,text="h_index")
    tv.column(6, minwidth=0, width=70, stretch=NO)
    tv.heading(7,text="Sjr")
    tv.column(7, minwidth=0, width=70, stretch=NO)
    tv.heading(8,text="Ranking")
    tv.column(8, minwidth=0, width=70, stretch=NO)
    tv.heading(9,text="Impact Factor")
    tv.column(9, minwidth=0, width=70, stretch=NO)
    for i in documents:
        tv.insert(parent='',index='end',values=(i.type,i.title,i.authors,i.magazine,i.date))
    def selectItem():
        curItem = tv.focus()
        valeursGeneral = tv.item(curItem)
        documentValues = valeursGeneral['values']
        magazine = documentValues[3]
        journals=get_journals(magazine)
        afficherJournal(journals,documentValues)

    def clickBtnExportData():
        for i in documents:
            exportData(i.type,i.title,i.authors,i.magazine,i.date,nameAuthor,numberDocuments,numberCitations,hIndex,organization)
    # inputId.delete(0,END)
    btn_export=Button(master=root,text="Export",bg='#0cb071',activebackground="green",fg='white',height=1,width=12,font=('Pangram',16),command=lambda:clickBtnExportData())
    btn_export.place(x=400,y=475)
    btn_journalSearch=Button(master=root,text="Search Journal",bg='#0cb071',activebackground="green",fg='white',height=1,width=12,font=('Pangram',16),command=lambda:selectItem())
    btn_journalSearch.place(x=600,y=475)
第二个窗口:

def afficherJournal(journal,documents):
    journalWindow = Tk()
    journalWindow.geometry("1200x600+20+20")
    frame9=Frame(master=journalWindow,width=800,height=75,bg='blue')
    frame9.place(x=200,y=0)
    journal_label=Label(master=frame9,text="Liste des journaux : ",bg='blue',fg='white',font=(None,18))
    journal_label.place(x=300,y=25)
    tv_journal=ttk.Treeview(journalWindow,columns=(1,2,3,4,5),show="headings",height="12")
    tv_journal.place(x=250,y=200)
    tv_journal.heading(1,text="Name")
    tv_journal.column(1, minwidth=0, width=300, stretch=NO)
    tv_journal.heading(2,text="h_index")
    tv_journal.column(2, minwidth=0, width=120, stretch=NO)
    tv_journal.heading(3,text="Sjr")
    tv_journal.column(3, minwidth=0, width=120, stretch=NO)
    tv_journal.heading(4,text="Ranking")
    tv_journal.column(4, minwidth=0, width=120, stretch=NO)
    tv_journal.heading(5,text="Impact factor")
    tv_journal.column(5, minwidth=0, width=120, stretch=NO)
    for i in journal:
        tv_journal.insert(parent='',index='end',values=(i.name,i.h_index,i.sjr,i.ranking,i.impact_factor))
    btn_ok=Button(master=journalWindow,text="OK",bg='#0cb071',activebackground="green",fg='white',height=1,width=12,font=('Pangram',16),command=lambda:selectItemJournal())
    btn_ok.place(x=500,y=500)
    def selectItemJournal():
        curItem = tv_journal.focus()
        valeursGeneral = tv_journal.item(curItem)
        journalValues = valeursGeneral['values']
        # magazine=journalValues[0]
        h_index = journalValues[1]
        sjr = journalValues[2]
        ranking = journalValues[3]
        impact_factor = journalValues[4]

你能给我们举一个最简单的例子说明你的问题吗?我们不想调试那么多代码。是的,当然,主要问题是:我想要一种方法将一行中的许多列传递给不同树视图中的一行。我希望你能理解。如果你有很多变量/函数/小部件,我建议你尝试使用一个类,也许这可以帮助你。谢谢那么,没有办法用函数来实现这一点吗?@ZiyadElabid任何你可以用类来实现的事情都可以用函数来实现,但是类可以使你的代码更整洁,更容易调试。