Python и Tkinter, переносят информацию списка из одной функции в другую - PullRequest
0 голосов
/ 22 января 2020

Я работаю над проектом. Я установил верхний уровень, список и текстовое поле на верхнем уровне. Я хочу иметь функцию, которая вызывается, когда я нажимаю на один из элементов списка, а затем хочу получить индекс выбранного элемента и обновить текстовое поле. Есть идеи?

Это код, который у меня есть, но он не делает то, что я хочу:

def helpInitialize():
    help = Toplevel()
    help.title("Help")
    help.geometry("1000x650")
    help.resizable(0,0)

    helpFiles= []

    listy = Scrollbar(help)
    listy.place(x=143, y=20, height=565)

    listHelp = Listbox(help, height=35, width=20)
    listHelp.place(x=20, y=20)
    listHelp.config(yscrollcommand=listy.set)
    listy.config(command=listHelp.yview)

    texty = Scrollbar(help)
    texty.place(x= 977, y= 20, height = 565)
    textx = Scrollbar(help,orient= HORIZONTAL)
    textx.place(x = 175, y= 583, width = 800)

    helpText = Text(help, bg="white", height=35, width=100)
    helpText.place(x=175, y=20)
    helpText.configure(state="disabled")
    helpText.config(yscrollcommand=texty.set, xscrollcommand=textx.set)
    texty.config(command=helpText.yview)
    textx.config(command=helpText.xview)

    listHelp.bind("<Button-1>", theFunction)

def theFunction(event):
    print(listHelp.get(listHelp.curselection()))

Ответы [ 2 ]

1 голос
/ 23 января 2020

В вашем случае вы можете использовать lambda для передачи виджетов Listbox и Text в функцию:

listHelp.bind('<Button-1>', lambda e: theFunction(e.widget, helpText))

Изменить theFunction():

def theFunction(listbox, textbox):
    index = listbox.curselection()[0]
    value = listbox.get(index)
    textbox.insert(tk.END, str(value)+'\n')
    textbox.see(tk.END)
1 голос
/ 22 января 2020

Обычно я помещаю свои объекты tkinter в класс. Это значительно упрощает обмен объектами между функциями. Вот пример того, как этого можно достичь с помощью предоставленного вами примера кода.

from tkinter import Toplevel, Scrollbar, Listbox, Text, HORIZONTAL, END

class Help:
    def __init__(self):
        self.help = Toplevel()
        self.help.title("Help")
        self.help.geometry("1000x650")
        self.help.resizable(0,0)

        self.helpFiles = ['Test ' + str(i) for i in range(100)]

        self.listy = Scrollbar(self.help)
        self.listy.place(x=143, y=20, height=565)

        self.listHelp = Listbox(self.help, height=35, width=20)
        self.listHelp.place(x=20, y=20)
        self.listHelp.config(yscrollcommand=self.listy.set)
        self.listy.config(command=self.listHelp.yview)

        for item in self.helpFiles:
            self.listHelp.insert(END, item)

        self.texty = Scrollbar(self.help)
        self.texty.place(x= 977, y= 20, height = 565)
        self.textx = Scrollbar(self.help, orient= HORIZONTAL)
        self.textx.place(x = 175, y= 583, width = 800)

        self.helpText = Text(self.help, bg="white", height=35, width=100)
        self.helpText.place(x=175, y=20)
        self.helpText.configure(state="disabled")
        self.helpText.config(yscrollcommand=self.texty.set, xscrollcommand=self.textx.set)
        self.texty.config(command=self.helpText.yview)
        self.textx.config(command=self.helpText.xview)

        self.listHelp.bind("<<ListboxSelect>>", self.theFunction)

    def theFunction(self, event):
        print(self.listHelp.get(self.listHelp.curselection()))
        # your code here

if __name__ == '__main__':
    test = Help()
    test.help.mainloop()

Кроме того, я изменил привязку вашей функции с <Button-1> на <<ListboxSelect>>. Я полагаю, что у каждого есть та функциональность, которую вы хотели.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...