从不同的列表框条目获取数据以调用单个函数

2024-04-24 20:40:32 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在制作一个程序,将我的成绩和评论从谷歌表单上传到D2L中

我的目标是有3到4个列表框,从我的谷歌表单中填充,并在单个函数中使用这些信息。print(l.get(cs))作为一个占位符,它最终将被用来调用我的谷歌表单上的不同标签

现在,我必须对go(){}和go2()进行每个列表框调用,以使它们工作。有没有办法让它们都调用go()并从列表框中保留数据

from tkinter import *

gr7asgn=["7asgn1","7asgn2","7asgn3","7asgn4","7asgn5"]
gr8asgn=["8asgn1","8asgn2","8asgn3","8asgn4","8asgn5"]
gr9asgn=["9asgn1","9asgn2","9asgn3","9asg4n","9asgn5"]


def go():
    cs = l.curselection()[0]
    print(l.get(cs))

def go1():
    cs = l1.curselection()[0]
    print(l1.get(cs))

def go2():
    cs = l2.curselection()[0]
    print(l2.get(cs))

root = Tk()
root.geometry("800x300")
root.title("import comments")

#grade 7 list
l = Listbox(root, width=30, height=15, selectmode = EXTENDED)
l.bind("<<ListboxSelect>>", lambda x: go())
for a in gr7asgn:
    l.insert(END,a)
l.grid(row=1,column=0)

#grade 8 list
l1= Listbox(root, width=30, height=15, selectmode = EXTENDED)
l1.bind("<<ListboxSelect>>", lambda x: go1())
for a in gr8asgn:
    l1.insert(END,a)
l1.grid(row=1,column=1)

#grade 9 list
l2 = Listbox(root, width=30, height=15, selectmode = EXTENDED)
l2.bind("<<ListboxSelect>>", lambda x: go2())
for a in gr9asgn:
    l2.insert(END,a)
l2.grid(row=1,column=2)

Tags: gol1表单getdefrootcslist
1条回答
网友
1楼 · 发布于 2024-04-24 20:40:32

您可以创建Button来运行函数,该函数将一次从所有Listboxes中获取所选项

当您单击其他列表框时,Listbox可能需要exportselection=False将值保留在curselection()

import tkinter as tk

gr7asgn=["7asgn1","7asgn2","7asgn3","7asgn4","7asgn5"]
gr8asgn=["8asgn1","8asgn2","8asgn3","8asgn4","8asgn5"]
gr9asgn=["9asgn1","9asgn2","9asgn3","9asg4n","9asgn5"]


def go():
    # TODO: check if curselection doesn't return empty list
    print('l1:', l1.curselection()[0], l1.get(l1.curselection()[0]))
    print('l2:', l2.curselection()[0], l2.get(l2.curselection()[0]))
    print('l3:', l3.curselection()[0], l3.get(l3.curselection()[0]))

root = tk.Tk()

# need `exportselection=False` to keep `curselection` when other listbox is clicked
l1 = tk.Listbox(root, exportselection=False)
l1.grid(row=1, column=0)
l1.insert('end', *gr7asgn) # put all items at once

l2 = tk.Listbox(root, exportselection=False)
l2.grid(row=1, column=1)
l2.insert('end', *gr8asgn)

l3 = tk.Listbox(root, exportselection=False)
l3.grid(row=1,column=2)
l3.insert('end', *gr9asgn)

b = tk.Button(root, text="Go", command=go)
b.grid(row=2, column=0, columnspan=3)

root.mainloop()

文件:Listbox

相关问题 更多 >