【问题标题】:how to open a new window from a double click on an element of a list?如何通过双击列表元素打开一个新窗口?
【发布时间】:2026-02-02 03:20:04
【问题描述】:

我必须实现一个从数据库创建接口的项目。我在 python 3 下编码,我的数据库在 sqlite 上,我的图形界面是用 tkinter 获得的。我有一个元素列表(MP、PSI、PT ...),我想通过双击此列表中的一个元素来打开一个新窗口。

我已经设法打开一个新窗口。但是,当我双击列表中的某个项目时,此窗口会自动打开而不是打开。

import sqlite3
from tkinter import *
bdd = sqlite3.connect("BDD.db")
curseur = bdd.cursor()


def fenetre_filiere():
    fenetre=Tk()
    fenetre.geometry("800x500")
    champ_label = Label(fenetre, text="Choisissez une filière")
    champ_label.pack()

filieres=liste_des_filieres()

liste_filieres = Listbox(fenetre)
liste_filieres.pack()


for i in range(len(filieres)):
    print(i,filieres[i])
    liste_filieres.insert(i,filieres[i])

liste_filieres.bind ('<Double-1>',open_fenetre()) ###Here is my problem###

def open_fenetre():
   fenetre2 = Tk()
   fenetre2.geometry("80x50")

def liste_des_filieres():
   req="""SELECT DISTINCT UPPER(NOMFILIERE)
   FROM FILIERE;"""
   curseur.execute(req)
   return curseur.fetchall()

我希望能够在双击此列表的元素时打开一个新窗口。

【问题讨论】:

    标签: python-3.x tkinter listbox toplevel


    【解决方案1】:

    填充tk.Listbox 后,您可以向它发送bind double click 事件,并让事件弹出一个tk.Toplevel 窗口,显示您需要从数据中显示的内容:

    每个应用程序通常不应多次调用tk.Tk()

    也许像这个简单的例子:

    import tkinter as tk
    import random
    
    
    def pop_window(dummy_event):
        data = listbox.get(listbox.curselection()[0])
        top = tk.Toplevel(root)
        tk.Label(top, text=f'popup window \nfor data: {data}').pack()
    
    
    root = tk.Tk()
    listbox = tk.Listbox(root)
    
    # populating the listbox with random data
    for _ in range(random.randint(1, 11)):
        listbox.insert(tk.END, random.randint(0, 1000))
    
    listbox.bind("<Double-Button-1>", pop_window)
    listbox.pack()
    
    root.mainloop()
    

    【讨论】:

      最近更新 更多