2017-10-11 3 views
0

Je souhaite créer une fenêtre tkinter, où apparaîtront les fichiers d'un dossier sous forme de menu déroulant et un bouton Select, de telle sorte que lorsque je sélectionne un élément du précédent liste le chemin complet sera enregistré dans une nouvelle variable. Apparemment, je dois donner une commande appropriée.Comment affecter un clic de bouton sur une variable sur tkinter

from Tkinter import * 
import tkFileDialog 
import ttk 
import os 




indir= '/Users/username/results' 


root = Tk() 

b = ttk.Combobox(master=root, values=os.listdir(indir)) # This will create a dropdown menu with all the elements in the indir folder. 
b.pack() 
w = Button(master=root, text='Select', command= ?) 
w.pack() 

root.mainloop() 
+0

commande widget sont normalement utilisé pour lier à une fonction/méthode. Il existe 'bind()' qui peut être utilisé pour lier des événements, par exemple 'bind ("

+0

J'ai mis à jour ma réponse pour inclure une méthode de combinaison du répertoire et du nom de fichier pour obtenir un chemin de fichier complet. Il existe plusieurs méthodes pour obtenir un chemin de fichier, donc si vous avez besoin de quelque chose de plus spécifique, faites le moi savoir. –

Répondre

1

Essayez quelque chose comme ceci:

w = Button(master=root, text='Select', command=do_something) 

def do_something(): 
    #do something 

Dans la fonction do_something vous créez ce que vous devez obtenir le chemin complet. Vous pouvez également passer des vars dans la commande.

+0

Comment puis-je faire cela? Je peux créer une fonction comme: 'def return_full_path(): retour indir +? '. Mais que mettrais-je à la place du point d'interrogation? Le point d'interrogation va être sélectionné par la souris, car c'est un élément de la liste déroulante. – thanasissdr

+0

Je ne suis pas exactement sûr de ce que vous voulez dire. L'exemple de code que j'ai ci-dessus sera exécuté lorsque vous appuyez sur le bouton. Il vous suffit donc d'inclure le code pour obtenir le chemin dans la fonction. – GreenSaber

1

Je pense que ce dont vous avez besoin ici est en fait une liaison. Bouton non requis

Voici un exemple qui va lister tout dans votre répertoire sélectionné, puis lorsque vous cliquez dessus dans la zone de liste déroulante, il imprimera sa sélection. Mise à jour

, a ajouté le répertoire et le nom du fichier combinant pour obtenir un nouveau chemin complet.

from Tkinter import * 
import tkFileDialog 
import ttk 
import os 


indir= '/Users/username/results' 
new_full_path = "" 

root = Tk() 

# we use StringVar() to track the currently selected string in the combobox 
current_selected_filepath = StringVar() 
b = ttk.Combobox(master=root, values=current_selected_filepath) 

function used to read the current StringVar of b 
def update_file_path(event=None): 
    global b, new_full_path 
    # combining the directory path with the file name to get full path. 
    # keep in mind if you are going to be changing directories then 
    # you need to use one of FileDialogs methods to update your directory 
    new_full_path = "{}{}".format(indir, b.get()) 
    print(new_full_path) 

# here we set all the values of the combobox with names of the files in the dir of choice 
b['values'] = os.listdir(indir) 
# we now bind the Cobobox Select event to call our print function that reads to StringVar 
b.bind("<<ComboboxSelected>>", update_file_path) 
b.pack() 
# we can also use a button to call the same function to print the StringVar 
Button(root, text="Print selected", command=update_file_path).pack() 

root.mainloop() 
+0

Merci pour la réponse. Cependant, je dois enregistrer le résultat et ne pas l'imprimer, car je dois l'utiliser dans une autre fonction. – thanasissdr

1

get() Renvoie la valeur actuelle du combobox (https://docs.python.org/3.2/library/tkinter.ttk.html)

from Tkinter import * 
import tkFileDialog 
import ttk 
import os 


indir= '/Users/username/results' 

#This function will be invoked with selected combobox value when click on the button 
def func_(data_selected_from_combo): 
    full_path = "{}/{}".format(indir, data_selected_from_combo) 
    print full_path 
    # Use this full path to do further 



root = Tk() 

b = ttk.Combobox(master=root, values=os.listdir(indir)) # This will create a dropdown menu with all the elements in the indir folder. 
b.pack() 


w = Button(master=root, text='Select', command=lambda: func_(b.get())) 
w.pack() 

root.mainloop()