2010-01-05 4 views
3

Je souhaite utiliser la réponse d'une invite de demande pour définir une variable. Malheureusement, J'ai le dilemme que je suis piégé dans la boucle en posant la question ou la fenêtre refuse de dessiner car la variable (urltoopen) n'a aucune valeur. Le code tel qu'il est:Comment utiliser Python tkSimpleDialog.askstring

urltoopen = tkSimpleDialog.askstring('Address', 'Where do we get the pictures from?') 
usock = urllib2.urlopen(urltoopen) 
data = usock.read()  
usock.close()      

Répondre

3

tkSimpleDialog.askstring retours None si l'utilisateur clique Annuler ou ferme la fenêtre (au lieu de cliquer sur OK ou en utilisant la touche Entrée); vous devriez vérifier cela (que voulez-vous faire si l'utilisateur choisit d'annuler? sûrement pas appeler urlopen de toute façon ...). En dehors de cela, vous utilisez la fonction correctement; J'imagine que par "n'a aucune valeur" vous voulez dire is None, non?

+0

La fenêtre ne s'ouvre pas. Au lieu de démarrer le programme renvoie 'NoneType' object has no attribute 'winfo_viewable'. Devrait-il être configuré comme une situation de type 'sinon' comme avec d'autres choses tkSimple? Est-ce que je pourrais voir un exemple de tkSimpleDialog plaçant une variable de chaîne avec la réponse qu'elle reçoit et permettant alors au programme de continuer (la boîte de dialogue se termine)? – Donnied

+0

Oups. Je pense que je l'ai fait fonctionner. Merci de votre contribution. Maintenant, je vais devoir effacer le widget tkinter vide qui apparaît et activer copier et coller. – Donnied

+0

J'ai trouvé que tkSimpleDialog.askstring n'a pas retourné None. Il renvoyait booléen true ou false. Quand j'ai écrit: si tkSimpleDialog.askstring est None, cette clause a TOUJOURS été exécutée, même si vous avez appuyé sur cancel dans la boîte de dialogue. Utiliser Python 2.7 sur Windows 10. – drlolly

0

root = Tk() 


try: 
     urltoopen = tkSimpleDialog.askstring('Ask Address', 'Where do we get the pictures from?') 
     usock = urllib2.urlopen(urltoopen)              
     data = usock.read()                  
     usock.close()                    
     a = data                     
except:                       
     sys.exit()  

fonctionne très bien. Mais il a besoin d'une gestion des erreurs (comme mentionné par Alex).

Questions connexes