python - 从不同的列表框条目中获取数据以调用单个函数
问题描述
我正在制作一个程序,从谷歌表格上传我的成绩和评论并将它们放入 D2L。
我的目标是从我的谷歌表格中填充 3 或 4 个列表框,并在单个函数中使用该信息。这print(l.get(cs))
占位符,它最终将用于调用我的谷歌表上的不同选项卡。
现在我必须让每个列表框调用go()
go1()
并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)
解决方案
您可以创建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()
文档:列表框
推荐阅读
- node.js - 在许多请求中,nodeJS 挂断,promise 无法解决——尤其是在低带宽的情况下
- laravel - 使用 Laravel 5.8 将图像上传到两个不同的文件夹位置
- salesforce - 添加选择列表代码后页面未重新呈现
- java - DirectPropertyAccessor 的替代品?
- python - 如何通过使用 pandas 定义除法函数来获得结果?
- javascript - 如何将 Angular 7 项目直接部署到我的网络服务器,这样我就不应该在部署后总是迁移我的 dist 文件夹?
- java - 在不使用任何第三方 jar 的情况下将文件从本地传输到 linux 系统(java 代码)
- javascript - 无法使用“this”关键字访问 Vuejs 数据/方法/生命周期实例中的数据
- google-compute-engine - Python GCP-API 权限问题:compute.instances.list
- webview - Flutter WebView 插件网页变为空白