Seite 1 von 1

Command wird sofort ausgeführt

Verfasst: Donnerstag 25. Februar 2010, 20:26
von tmfdsm
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?

Verfasst: Donnerstag 25. Februar 2010, 20:58
von wuf
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:

Verfasst: Donnerstag 25. Februar 2010, 21:07
von tmfdsm
ja, danke, habe ein anderes Problem gelöst, sodass ich das jetzt machen konnte ;) Danke!

Verfasst: Freitag 26. Februar 2010, 00:09
von EyDu
Aber irgendjemand muss jetzt schon noch functools.partial und lambda in den raum werfen!

Verfasst: Freitag 26. Februar 2010, 08:30
von dahaze
Ich fang mal an: :wink:

Code: Alles auswählen

but=Button(root, text=result[zahl], command=lambda :webbrowser.open(url, 0, 0))

Verfasst: Freitag 26. Februar 2010, 12:29
von tmfdsm
ja, das kenne ich schon ;)

Verfasst: Samstag 27. Februar 2010, 08:45
von wuf
...... 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:

Verfasst: Samstag 27. Februar 2010, 09:57
von HWK
@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

Verfasst: Samstag 27. Februar 2010, 10:12
von wuf
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: