как открыть новое окно двойным щелчком мыши по элементу списка? - PullRequest
1 голос
/ 15 июня 2019

Я должен реализовать проект, который должен сделать интерфейс из базы данных.Я кодирую под 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 голосов
/ 15 июня 2019

После того, как вы заполнили tk.Listbox, вы можете bind a 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()
...