There's no "best way" or rather what fits best, depends on your code (and experience).
I personally, would probably just implement functions like "OnClick()" for the button class and have an additional class, that receives all sf::Event from the event loop, knows all the widgets and determines for a mouse button event which widget is located at the position and calls OnClick for that button instance.