2014-07-12 4 views
0

Très bien, donc je suis this tutoriel sur les interfaces graphiques Python avec Tkinter.Python: Tkinter bouton fonction et urllib2

Mon code est ci-dessous et tout fonctionne bien. Cependant, ce n'est pas exact puisque le programme ne fait pas ce dont j'ai réellement besoin.

Dans la zone GUI, je souhaite que l'utilisateur puisse fournir un lien qui sera ensuite utilisé à partir de urllib2 pour récupérer des liens du Web, puis les ouvrir via le menu déroulant de mon interface graphique. Jusqu'à présent, le lien que l'utilisateur est censé fournir est codé en dur dans la source et le bouton ne fait pratiquement rien.

Donc ce dont j'ai besoin ici, c'est de pouvoir connecter le bouton my avec response = urllib2.urlopen?

Avez-vous pensé à cela? Merci beaucoup.

import urllib2 
from Tkinter import * 
#import tkinter.messagebox 
#import turtle 

#fetching uris from the web 
response = urllib2.urlopen('http://www.website.com/..') 
html = response.read() 
with open("/path/to/URIs.txt", 'w') as outfile: 
    outfile.write(html) 


def ChangeLabel(): 
    response = urllib2.urlopen('http://www.website.com/..') 
    labelText.set(response) 
    #yourName.delete(0, END) 
    html = response.read() 
    #yourName.insert(0, html) 
    return 

def aboutMe(): 
    tkinter.messagebox.showinfo('Hello there!') 
    return 

def openURIS(): 
    f = open("/path/to/URIs.txt") 
    aboutStud.delete(1.0, END) 

    studGradeString = "" 

    for i in f: 
      studGradeString += i 

    aboutStud.insert(END, studGradeString) 
    f.close() 
    return 

app = Tk() 
app.title('Simple Tkinter GUI') 
app.geometry('400x500') 

menubar = Menu(app) 
filemenu = Menu(menubar,tearoff=0) 
filemenu.add_command(label="Open URIs", command=openURIS) 

filemenu.add_separator() 

filemenu.add_command(label="Quit", command=app.quit) 
menubar.add_cascade(label="File", menu=filemenu) 


helpmenu = Menu(menubar, tearoff=0) 
helpmenu.add_cascade(label="About us", command=aboutMe) 
menubar.add_cascade(label="Help", menu=helpmenu) 

app.config(menu=menubar) 

aboutStud = Text(app) 
aboutStud.insert(END, "Paste link into the little box to fetch URIs") 
aboutStud.pack() 

labelText = StringVar() 
labelText.set('Click button below') 
label1 = Label(app, textvariable=labelText, height=4) 
label1.pack() 

#checkBoxVal = IntVar() 
#checkBox1 = Checkbutton(app, variable=checkBoxVal, text="Hello?") 
#checkBox1.pack() 

custom = StringVar(None) 
legend = Entry(app, textvariable=custom) 
legend.pack() 

button1 = Button(app, text='Click to fetch URIs', width=20, command=ChangeLabel) 
button1.pack(side='top', padx=15 , pady=15) 

app.mainloop() 

Il y a aussi beaucoup de lignes que je devrais changer ou même supprimer, mais je prévois de le faire une fois, je comprends mieux le code et comment cela fonctionne.

+0

Mais vous avez déjà une connexion entre Button et function (avec la ligne 'response = urllib2.urlopen ('http://www.website.com/ ..')') parce que vous avez 'command = ChangeLabel' – furas

+0

coller l'URL dans la boîte et cliquer sur le bouton ne fait qu'inviter une erreur. Je vais éditer et montrer dans ma question. Je sais qu'il y a déjà un lien entre les deux mais pas celui que je veux. C'est un désordre tbh – kapelnick

+0

Alors mettez celui dans 'ChangeLabel' – furas

Répondre

1

Si l'utilisateur entre URL, alors vous l'avez dans custom. Vous n'avez qu'à l'obtenir custom.get() et l'utiliser en urllib2.urlopen(). Lire Tkinterbook - peut-être c'est vieux mais toujours le meilleur.