我必须实现一个从数据库创建接口的项目。我使用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()
当我双击该列表中的一个元素时,我希望能够打开一个新窗口。
答案 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()