如何通过双击列表元素打开一个新窗口?

时间:2019-06-15 10:31:06

标签: python-3.x tkinter listbox toplevel

我必须实现一个从数据库创建接口的项目。我使用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()

当我双击该列表中的一个元素时,我希望能够打开一个新窗口。

1 个答案:

答案 0 :(得分:0)

在您填充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()