Binding a keyboard key to a Tkinter button
TL;DR: Yes, binding the keyboard key and button to the same function is a proper solution.

How to bind a keyboard key to a tkinter button

There are two ways to share a function between a bind keypress a command button.

Method 1: Use an optional event parameter

As you have already discovered yourself, you can use an optional event parameter that you don't depend on.

Since the parameter is unused, you can prefix it with an underscore (_event) to prevent warnings.

    self.button = Button(frame, text="Hello", command=self.func)
    master.bind('f', self.func)

def func(self, _event=None):
    print("Hello, world")


Full Example: 

# from tkinter import Button, Frame, Tk  # Python 3
from Tkinter import Button, Frame, Tk    # Python 2

class MyClass:
    def __init__(self, master):
       frame = Frame(master)
       frame.pack()

       self.button = Button(frame, text="Hello", command=self.func)
       self.button.pack(side='left')

       master.bind('f', self.func)

    def func(self, _event=None):
        print("Hello, world")

root = Tk()
abc = MyClass(root)
root.mainloop()


Method 2: Use lambdas

If the event parameter isn't being used, you can discard it by binding your key to a lambda function.

    self.button = Button(frame, text="Hello", command=self.func)
    master.bind('f', lambda event: self.func())

def func(self):
    print("Hello, world")


Full Example: 

# from tkinter import Button, Frame, Tk  # Python 3
from Tkinter import Button, Frame, Tk    # Python 2

class MyClass:
    def __init__(self, master):
        frame = Frame(master)
        frame.pack()

        self.button = Button(frame, text="Hello", command=self.func)
        self.button.pack(side='left')

        master.bind('f', lambda event: self.func())

    def func(self):
        print("Hello, world!")

root = Tk()
abc = MyClass(root)
root.mainloop()


(See How do I make Bind and Command do the same thing in tkinter?)



Miscellaneous tips

Avoid using wildcard imports

You should try to be explicit whenever you import in Python.

Yes

from Tkinter import Tk, Button, Frame


Yes

import Tkinter as tk


No

from Tkinter import *


(See Why is “import *” bad?)

Switch to Python 3

As coal_'s answer mentioned, development on Python 2 is scheduled to end in 2020. To ensure continued support, you should transition to Python 3 or later.

Use strings when packing constants

This is more personal preference than a rule, but I usually try to use strings when packing in tkinter. It means you don't have to import as many things.

Yes

self.button.pack(side="left")


No

self.button.pack(side=LEFT)