在 Tkinter Python 中获取 listbox 的选择,selectmode = extended

在 Tkinter Python 中,当 listbox 的选择模式设置为 “extended” 时,需要获取选定的项。例如,在 listbox 中选择多个脚本,并将这些脚本作为参数传递给解释器,以逐个运行这些脚本并给出结果。然而,使用以下方法只能选择一个脚本:
在这里插入图片描述

def get_list(*event):
    que2.put_nowait(script)
    seltext = liste.get(index)
    script=seltext
    que2.put_nowait(script)

def get_port(event):
    index = liste1.curselection()[0]
    seltext = liste1.get(index)
    nb_port=seltext[1]
    que1.put_nowait(nb_port)

def call_interpreter1():
    b=que2.get(block=True)
    a=que1.get(block=True)
    print "prameters are :" ,a ,b ,"\r\n"
    c='python C:\\workspace\\Project_Interpreter\\ValidationTool-v1.0.py -s %s %s'%(b,a)
    ps=sp.Popen(['cmd','/K',c],creationflags=0,shell=False,stdout=PIPE,stderr=sp.STDOUT,stdin=PIPE)
  1. 解决方案
    要获取选择,需要在 listbox 上调用 curselection 方法。此方法返回一个包含每个选中项索引的列表。然后可以使用 get 方法获取该索引处的项。
for index in liste1.curselection():
    item = liste1.get(index)
    print(index, ":", item)

示例代码:

import tkinter as tk
from queue import Queue

que1 = Queue()
que2 = Queue()

def get_list(*event): 
    for index in liste.curselection():
        script = liste.get(index)
        que2.put_nowait(script)

def get_port(event): 
    index = liste1.curselection()[0]
    seltext = liste1.get(index)
    nb_port=seltext[1]
    que1.put_nowait(nb_port)

def call_interpreter1(): 
    b=que2.get(block=True)
    a=que1.get(block=True)
    print("prameters are :",a ,b ,"\r\n")
    c='python C:\\workspace\\Project_Interpreter\\ValidationTool-v1.0.py -s %s %s'%(b,a)
    ps=sp.Popen(['cmd','/K',c],creationflags=0,shell=False,stdout=PIPE,stderr=sp.STDOUT,stdin=PIPE)

root = tk.Tk()

liste = tk.Listbox(root, height=5, width=30, selectmode="extended")
liste.insert(1, "Script 1")
liste.insert(2, "Script 2")
liste.insert(3, "Script 3")
liste.insert(4, "Script 4")
liste.insert(5, "Script 5")

liste1 = tk.Listbox(root, height=5, width=30, selectmode="extended")
liste1.insert(1, ("Port 1", 1))
liste1.insert(2, ("Port 2", 2))
liste1.insert(3, ("Port 3", 3))

btn_get_list = tk.Button(root, text="Get List", command=get_list)
btn_get_port = tk.Button(root, text="Get Port", command=get_port)
btn_call_interpreter = tk.Button(root, text="Call Interpreter", command=call_interpreter1)

liste.pack()
liste1.pack()
btn_get_list.pack()
btn_get_port.pack()
btn_call_interpreter.pack()

root.mainloop()

在上面的代码中,我们创建了两个 Listbox,每个 Listbox 都在创建时指定了 selectmode="extended",表示可以多选。然后,绑定了按钮事件,以便在用户点击按钮时获取所选项目。

当用户点击 “Get List” 按钮时,get_list 函数将遍历选定的项并将其放入队列 que2 中。

当用户点击 “Get Port” 按钮时,get_port 函数将获取第一个选定项的索引,并使用 get 方法获取该项的文本。然后将文本解析为端口号,并将其放入队列 que1 中。

当用户点击 “Call Interpreter” 按钮时,call_interpreter1 函数将从队列 que2que1 中获取选定的脚本和端口号,并将这些信息作为参数传递给解释器。解释器将运行选定的脚本,并给出结果。

  • 5
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值