2013-09-16 4 views
-1

Итак, у меня есть следующий код:функции с аргументами автозапуске

from Tkinter import * 
import socket 

def click(*args): 
    sock = socket.socket() 
    try: 
     sock.connect(('localhost', 9999)) 
     sock.send(args) 
    except socket.error: 
     print 'server is not runing' 
     pass 


root = Tk() 
root.bind("<Button-1>", click) 
mainloop() 

Это выглядит довольно ясно: вы запустите код, прибывает окно Tkinter, вы щелкните по ней, и она печатает «сервер не подножка» , поскольку сервер не работает на порте 9999.

Но если изменить вызов функции из связанного приложения click к click("wtf") или даже к click(), скрипт будет печатать сообщение прямо после появления окна, перед тем вы на самом деле нажмите его.

Почему такое происходит?

+1

возможно дубликат дюжины или более вопросов, в том числе [Вызов функции с аргументами о «команде» и «привязки»] (http://stackoverflow.com/questions/9396211/calling-functions-with-arguments -он-Командно-связывать). –

ответ

2

Работает как и ожидалось ;-) С помощью круглых фигурных скобок функция «click» вызывается до того, как root.bind будет выполнен. Без брекетов «щелчок» будет использоваться как ссылка.

>>> def click(*args): 
...  print "click" 
... 
>>> click 
<function click at 0x022FECB0> 
>>> click() 
click 
>>> 
Смежные вопросы