Comment puis-je obtenir l'option sélectionnée par un utilisateur à partir d'une zone de liste déroulante au niveau supérieur


Yizhao Chen

Je suis nouveau sur Python et Tkinter et j'essayais de créer une interface pour rechercher et tracer des données. J'ai créé une toplevelfenêtre très simple pour obtenir les valeurs d'un comboboxqui serait sélectionné parmi les utilisateurs. Cependant, je trouve que le script n'imprimerait que le premier élément de la liste s'il comboxlist2.current(0)était défini ou qu'il n'imprimerait rien, peu importe celui qui est sélectionné dans la boîte. J'ai créé un exemple de script pour tester cela. Si je clique sur "rechercher et créer", alors les valeurs de retour peuvent changer en fonction de la sélection de l'utilisateur dans comboxlist1, alors que tout renvoie "1", peu importe ce que l'utilisateur a sélectionné comboxlist2. Alors, puis-je demander où est le problème et comment le résoudre?

Merci d'avance pour les suggestions ou solutions potentielles!

import tkinter as tk
from tkinter import ttk
from tkinter import *

def root_print():    
    reg_in = comboxlist1.get()
    print(reg_in)   #print the value selected

def on_click():
    tl = Toplevel()
    comvalue2 = tk.StringVar()
    comboxlist2 = ttk.Combobox(tl,textvariable=comvalue2)
    comboxlist2["values"] = ("1","2","3")
    comboxlist2.grid()
    comboxlist2.current(0)  #select the first one as default
    #mm = comboxlist2.get()
    #print(mm)              #print directly
    go(comboxlist2,tl)
    tl.wait_window()
    return

def go(comboxlist2,tl):
    mm = comboxlist2.get()
    Button(tl,text='go', command=lambda:test(mm)).grid()

def test(mm):
    print(mm)       #do the same thing for the comboxlist2

root = Tk()
root.title('search')      #create an interface
root.geometry('+400+200')       #size and position

Label(text='region    ').grid(row=2,column=0)
comvalue1 = tk.StringVar()
comboxlist1=ttk.Combobox(root,textvariable=comvalue1) 
comboxlist1["values"]=("all","africa","asia","australia","canada","europe","mexico","southamerica","usa")
comboxlist1.grid(row=2,column=1)
comboxlist1.current(0)
Button(text='search & create', command=root_print).grid(row=0,column=4)
Button(text='click', command=on_click).grid(row=1, column=4)
loop = mainloop()#go!
Miraj50

Voici le code de travail, qui devrait répondre à vos besoins. J'ai supprimé les importations et certains extraits de code qui ne sont pas utiles.

import tkinter as tk
from tkinter import ttk

def root_print():
    reg_in = comboxlist1.get()
    print(reg_in)

def on_click():
    tl = tk.Toplevel()
    comvalue2 = tk.StringVar()
    comboxlist2 = ttk.Combobox(tl,textvariable=comvalue2)
    comboxlist2["values"] = ("1","2","3")
    comboxlist2.grid()
    comboxlist2.current(0)  #select the first one as default
    tk.Button(tl,text='go', command=lambda: test(comboxlist2.get())).grid()
    tl.wait_window()

def test(mm):
    print(mm)

root = tk.Tk()
root.title('search')      #create an interface
root.geometry('+400+200')       #size and position

tk.Label(text='region    ').grid(row=2,column=0)
comvalue1 = tk.StringVar()
comboxlist1=ttk.Combobox(root,textvariable=comvalue1) 
comboxlist1["values"]=("all","africa","asia","australia","canada","europe","mexico","southamerica","usa")
comboxlist1.grid(row=2,column=1)
comboxlist1.current(0)
tk.Button(text='search & create', command=root_print).grid(row=0,column=4)
tk.Button(text='click', command=on_click).grid(row=1, column=4)
root.mainloop()

Articles connexes