Command wird sofort ausgeführt

Fragen zu Tkinter.
Antworten
tmfdsm
User
Beiträge: 34
Registriert: Donnerstag 28. Januar 2010, 19:41

Ich habe einen Button:

Code: Alles auswählen

but=Button(root, text=result[zahl], command=webbrowser.open(url, 0, 0))
Sobald ich jetzt den Code starte, wird die Webseite geöffnet, aber das soll erst passieren, wenn ich auf den Button klicke. Was muss ich dafür machen?
Benutzeravatar
wuf
User
Beiträge: 1529
Registriert: Sonntag 8. Juni 2003, 09:50

Hallo tmfdsm

Kannst du einmal das folgende ausprobieren:

Code: Alles auswählen

def oben_webbrowser():
    webbrowser.open(url, 0, 0)

but=Button(root, text=result[zahl], command=oben_webbrowser)
Edit: Sorry die Funktion sollte eigentlich 'open_webbrowser' lauten. :D

Gruss wuf :wink:
Zuletzt geändert von wuf am Donnerstag 25. Februar 2010, 22:34, insgesamt 1-mal geändert.
Take it easy Mates!
tmfdsm
User
Beiträge: 34
Registriert: Donnerstag 28. Januar 2010, 19:41

ja, danke, habe ein anderes Problem gelöst, sodass ich das jetzt machen konnte ;) Danke!
EyDu
User
Beiträge: 4881
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

Aber irgendjemand muss jetzt schon noch functools.partial und lambda in den raum werfen!
Das Leben ist wie ein Tennisball.
dahaze
User
Beiträge: 75
Registriert: Freitag 13. März 2009, 10:57
Wohnort: im Schwabenland

Ich fang mal an: :wink:

Code: Alles auswählen

but=Button(root, text=result[zahl], command=lambda :webbrowser.open(url, 0, 0))
tmfdsm
User
Beiträge: 34
Registriert: Donnerstag 28. Januar 2010, 19:41

ja, das kenne ich schon ;)
Benutzeravatar
wuf
User
Beiträge: 1529
Registriert: Sonntag 8. Juni 2003, 09:50

...... Hier noch die fehlende Variante mit 'functools.partial':

Code: Alles auswählen

import Tkinter as tk
import webbrowser
from functools import partial


def call_webbrowser():
    webbrowser.open('192.168.0.253', 0, 0)

app_win = tk.Tk()

button = tk.Button(app_win, text="webbrowser",
    command=partial(call_webbrowser))
button.pack()

app_win.mainloop()
oder

Code: Alles auswählen

import Tkinter as tk
import webbrowser
from functools import partial

URL = '192.168.0.253'
NEW = 0
ATORAISE = False

def call_my_webbrowser(url, new, autoraise):
    webbrowser.open(url, new, autoraise)

app_win = tk.Tk()

button = tk.Button(app_win, text="webbrowser ("+URL+")",
    command=partial(call_my_webbrowser, URL, NEW, ATORAISE))
button.pack()

app_win.mainloop()
oder

Code: Alles auswählen

import Tkinter as tk
import webbrowser
from functools import partial

URL = '192.168.0.253'
NEW = 0
ATORAISE = False

def call_my_webbrowser(*args):
    webbrowser.open(*args)

app_win = tk.Tk()

button = tk.Button(app_win, text="webbrowser ("+URL+")",
    command=partial(call_my_webbrowser, URL, NEW, ATORAISE))
button.pack()

app_win.mainloop()
Kennst du sicher auch schon?

Gruss wuf :wink:
Take it easy Mates!
Benutzeravatar
HWK
User
Beiträge: 1295
Registriert: Mittwoch 7. Juni 2006, 20:44

@wuf: Das zeigt aber nicht unbedingt den Sinn bzw. Vorteil von partial, da Du ja trotzdem eine neue Funktion definierst. Meines Erachtens sollte es eher so aussehen:

Code: Alles auswählen

import Tkinter as tk
import webbrowser
from functools import partial

URL = '192.168.0.253'
NEW = 0
ATORAISE = False

app_win = tk.Tk()

button = tk.Button(app_win, text="webbrowser ("+URL+")",
    command=partial(webbrowser.open, URL, NEW, ATORAISE))
button.pack()

app_win.mainloop()
MfG
HWK
Benutzeravatar
wuf
User
Beiträge: 1529
Registriert: Sonntag 8. Juni 2003, 09:50

Hallo HWK

Super! Das ist ja noch besser. Besten Dank für deinen Tipp! Habe functools.partial leider noch nicht viel gebraucht.

Gruss wuf :wink:
Take it easy Mates!
Antworten