You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Tkinter中实现Listbox项双击后显示到搜索输入框的问题

解决方案

要实现双击Listbox项填充到搜索Entry的功能,只需在你的OOP代码中做以下关键修改:

  1. 将StringVar改为实例变量:原string1是方法内局部变量,后续事件处理函数无法访问,需改为self.string1。
  2. 给Listbox绑定双击事件:关联<Double-Button-1>事件与自定义处理函数。
  3. 实现双击事件处理逻辑:获取选中项内容并设置到Entry对应的StringVar中。

修改后的完整代码

import re
import tkinter as tk
from tkinter import ttk
from tkinter import *
from PIL import Image, ImageTk


root = tk.Tk()


class Player:
    """Creating the information for the soccer player"""
    def __init__(self,name,team,number):
        self.name = name
        self.team = team
        self.number = number


class Screen:
    def __init__(self,master):
        self.master = master
        self.search_player()

    def search_player(self):
        """The main search window, this is where you will search for the player"""
        # 改为实例变量,方便事件函数访问
        self.string1 = tk.StringVar()

        # Clears first frame
        for i in self.master.winfo_children():
            i.destroy()
        # Create first frame
        self.frame1 = tk.Frame(self.master, width=500, height=300)
        self.frame1.pack()
        # Search Label
        self.search_label = tk.Label(self.master, text="Search Player:", font=("Times, 12"))
        self.search_label.place(x=15, y=50)

        # Entry for searching
        self.search_entry = tk.Entry(self.master, font=("arial, 15"),textvariable=self.string1)
        self.search_entry.place(x=125, y=50)
        # Search Button
        self.search_button = tk.Button(self.master, text="Search", font=("Times, 13"), command=lambda: self.player_info_screen())
        self.search_button.place(x=360, y=47)

        # Listbox storing players name
        self.listbox1 = tk.Listbox(self.master,font=("Times, 12"))
        self.listbox1.place(x=125, y=100)
        # 绑定双击事件到处理函数
        self.listbox1.bind("<Double-Button-1>", self.on_listbox_double_click)

        # Scroll bar for list box
        self.scrollbar = tk.Scrollbar(self.master)
        self.scrollbar.place(x=310, y=100)

        # Attaching listbox to scrollbar and scrollbar to listbox
        self.listbox1.config(yscrollcommand=self.scrollbar.set)
        self.scrollbar.config(command=self.listbox1.yview())

        # list made up of each object instance showing players name
        footballer_names = [player1.name, player2.name, player3.name, player4.name]
        # Adding players into listbox
        for name in footballer_names:
            self.listbox1.insert(0, name)

    def on_listbox_double_click(self, event):
        # 获取选中项索引
        selected_index = self.listbox1.curselection()
        if selected_index:
            # 获取选中的球员名字
            player_name = self.listbox1.get(selected_index[0])
            # 将名字填充到Entry中
            self.string1.set(player_name)

    def player_info_screen(self):
        # 可在此补充球员详情页逻辑,原代码未实现,暂留空方法
        pass


player1 = Player("Neymar","Paris Saint Germain","10")
player2 = Player("Lionel Messi","Inter Miami","30")
player3 = Player("Kevin De Bruyne","Manchester City","17")
player4 = Player("Cristiano Ronaldo", "Al Nassr", "7")

window = Screen(root)

root.geometry("500x400")
root.mainloop()

关键修改说明

  • 实例化StringVar:通过self.string1让事件处理函数能直接修改Entry的显示内容。
  • 绑定双击事件:用bind方法将鼠标双击操作与处理函数关联,确保触发双击时执行对应逻辑。
  • 处理双击逻辑:先通过curselection()获取选中项的索引,再用get()提取内容,最后通过set()方法将内容填入Entry。

内容的提问来源于stack exchange,提问作者jclasen3

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.18 08:23:09