title: Python 3 error with Tkinter: _tkinter.TclError: unknown option "-padding"
body: <p>I've been learning tkinter with the help of a python book. However, the python book is written for python 2 and I'm using python 3. This has generated several errors, and up to now I've been able to fix them, with the aid of other questions here. It is a basic program that shows a window with buttons to play 3 games or to destroy the window. When either of the first two games(rock paper scissors and hangman) are opened, they are supposed to open a Toplevel() that has various buttons that lets you play the game. I haven't written the graphics code for the third game yet. They don't play, though, because of an error: <strong>_tkinter.TclError: unknown option "-padding"</strong>
  which I haven't found any detail about online. I understand that the unknown option means that that attribute/keyword doesn't exist in my version of tkinter and python 3.
  The error lines look like:
  <strong>rpsFrame = Frame(rpsWindow, padding = '3 3 12 12', width = 300)</strong></p>
  
  <p>In case you need it, the error and code are below.
  (this code doesn't run without additional code)
  (if you want this code I will add it, but I want to keep this shortish)</p>
  
  <p>Here is the full error traceback:</p>
  
  <pre><code>Exception in Tkinter callback
  
  Traceback (most recent call last):
    File "C:\Python34\lib\tkinter\__init__.py", line 1533, in __call__
      return self.func(*args)
    File "E:\Python\Python Book\Graphics\Hangman.py", line 149, in gui
      hmFrame = Frame(hmWindow, padding = "3 3 12 12", width = 300)
    File "C:\Python34\lib\tkinter\__init__.py", line 2582, in __init__
      Widget.__init__(self, master, 'frame', cnf, {}, extra)
    File "C:\Python34\lib\tkinter\__init__.py", line 2122, in __init__
      (widgetName, self._w) + extra + self._options(cnf))
  _tkinter.TclError: unknown option "-padding"
  </code></pre>
  
  <p>Here is the interface code:</p>
  
  <pre><code>from tkinter import *
  import RockPaperScissors
  import Hangman
  import PokerDice
  
  root = Tk()
  root.title("Linux User &amp; Developer's Mega Games Collection")
  
  mainframe = Frame(root, height = 200, width = 500)
  mainframe.pack_propagate(0)
  mainframe.pack(padx = 5, pady = 5)
  
  intro = Label(mainframe, text = """Welcome to Linux User &amp; Developers Mega
  Microgames Collection.
  Select one of the following games to play:
  """)
  intro.pack(side = TOP)
  
  rpsButton = Button(mainframe, text = "Rock, Paper, Scissors",
                     command = RockPaperScissors.gui)
  rpsButton.pack()
  
  hmButton = Button(mainframe, text = "Hangman", command = Hangman.gui)
  hmButton.pack()
  
  pdButton = Button(mainframe, text = "Poker Dice", command = PokerDice.start)
  pdButton.pack()
  
  exitButton = Button(mainframe, text = "Quit", command = root.destroy)
  exitButton.pack(side = BOTTOM)
  
  root.mainloop()
  </code></pre>
  
  <p>Here is the code to Rock, Paper Scissors:</p>
  
  <pre><code>from tkinter import *
  
  import random
  
  def gui():
  
      rock = 1
      paper = 2
      scissors = 3
  
      names = { rock: "Rock", paper: "Paper", scissors: "Scissors" }
      rules = { rock: scissors, paper: rock, scissors: paper }
  
      def start():
          while game():
              pass
  
      def game():
          player = playerChoice.get()
          computer = random.randint(1, 3)
          computerChoice.set(names[computer])
          result(player, computer)
  
      def result(player, computer):
          newScore = 0
          if player == computer:
              resultSet.set("Tie game.")
          elif rules[player] == computer:
              result.set("Your victory has been assured.")
              newScore = playerScore.get()
              newScore += 1
              playerScore.set(newScore)
          else:
              resultSet.set("The commputer laughs as you realise you have " +
                            "been defeated.")
              newScore = computerScore.get()
              newScore += 1
              computerScore.set(newScore)
  
      rpsWindow = Toplevel()
      rpsWindow.title("Rock, Paper, Scissors")
  
      playerChoice = IntVar()
      computerChoice = StringVar()
      resultSet = StringVar()
      playerChoice.set(1)
      playerScore = IntVar()
      computerScore = IntVar()
  
      **rpsFrame = Frame(rpsWindow, padding = '3 3 12 12', width = 300)**
      #this is what is causing the error
      rpsFrame.grid(column = 0, row = 0, sticky = (N, W, E, S))
      rpsFrame.columnconfigure(0, weight = 1)
      rpsFrame.rowconfigure(0, weight = 1)
  
      Label(rpsFrame, text = 'Player').grid(column = 1, row = 1, sticky = W)
      Radiobutton(rpsFrame, text = 'Rock', variable = playerChoice,
                  value = 1).grid(column = 1, row = 2, sticky = W)
      Radiobutton(rpsFrame, text = 'Paper', variable = playerChoice,
                  value = 2).grid(column = 1, row = 2, sticky = W)
      Radiobutton(rpsFrame, text = 'Scissors', variable = playerChoice,
                  value = 3).grid(column = 1, row = 2, sticky = W)
  
      Label(rpsFrame, text = 'Computer').grid(column = 3, row = 3, sticky = W)
      Label(rpsFrame, textvariable = computerChoice).grid(column = 1,
                                                          row = 3, sticky = W)
  
      Button(rpsFrame, text = "Play", command = start).grid(column = 2, row = 2)
  
      Label(rpsFrame, text = "Score").grid(column = 1, row = 5, sticky = W)
      Label(rpsFrame, textvariable = playerScore).grid(column = 1,
                                                       row = 6, sticky = W)
  
      Label(rpsFrame, text = "Score").grid(column = 1, row = 5, sticky = W)
      Label(rpsFrame, textvariable = computerScore).grid(column = 3,
                                                         row = 6, sticky = W)
  
      Label(rpsFrame, textvariable = resultSet).grid(column = 2, row = 7)
  </code></pre>
  
  <p>Here is the Hangman code:</p>
  
  <pre><code>from tkinter import *
  import random
  
  word = 0
  wordLength = 0
  clue = 0
  
  def gui():
      global word, wordLength, clue
      dictionary = ["..."]
      #I've omitted the words due to length
      word = random.choice(dictionary)
      wordLength = len(word)
      clue = wordLength * ["_"]
      tries = 6
  
      def hangedman(hangman):
          grphic = ["""..."""]
          #I've omitted the ASCII graphics that go in the list due to length
          graphicSet = graphic[hangman]
          hmGraphic.set(graphicSet)
  
      def game():
          lettersWrong = incorrectGuess.get()
          letter = guessLetter()
          firstIndex = word.find(letter)
          if firstIndex == -1:
              lettersWrong += 1
              incorrectGuesses.set(lettersWrong)
          else:
              for i in range(wordLength):
                  if letter ++ word[i]:
                      clue[i] = letter
          hangedman(lettersWrong)
          clueSet = " ".join(clue)
          wordOutput.set(clueSet)
          if lettersWrong == tries:
              resultText = "Game Over. The word was " + word
              resultSet.set(resultText)
              newScore = computerScore.get()
              newScore += 1
              computerScore.set(newScore)
          if "".join(clue) == word:
              resultText = "You win! The word as " + word
  
      def guessLetter():
          letter = letterGuess.get()
          letter = letter.strip()
          letter = letter.lower()
          return letter
  
      def resetGame():
          global word, wordLength, clue
          incorrectGuesses.set(0)
          hangedman(0)
          resultSet.set("")
          letterGuess.set("")
          word = random.choice(dictionary)
          wordLength = len(word)
          clue = wordLength * ["_"]
          newClue = " ".join(clue)
          wordOutput.set(newClue)
  
      hmWindow = Toplevel()
      hmWindow.title("Hangman")
      incorrectGuesses = IntVar()
      incorrectGuesses.set(0)
      playerScore = IntVar()
      computerScore = IntVar()
      resultSet = StringVar()
      letterGuess = StringVar()
      wordOutput = StringVar()
      hmGraphic = StringVar()
  
      **hmFrame = Frame(hmWindow, padding = "3 3 12 12", width = 300)**
      #this is what is causing the error
      hmFrame.grid(column = 0, row = 0, stick = (N, W, E, S))
      hmFrame.columnconfigure(0, weight = 1)
      hmFrame.rowconfigure(0, weight = 1)
  
      Label(hmFrame, textvariable = hmGraphic).grid(column = 2, row = 1)
      Label(hmFrame, text = "Word").grid(column = 2, row = 2)
      Label(hmFrame, textvariable = wordOutput).grid(column = 2, row = 3)
  
      Label(hmFrame, text = "Enter a letter").grid(column = 2, row = 4)
      hmEntry = Entry(hmFrame, exportselection = 0,
                      textvariable = letterGuess).grid(column = 2, row = 5)
      hmEntryButton = Button(hmFrame, text = "Guess",
                             command = game).grid(column = 2, row = 10)
  
      Label(hmFrame, text = "Wins").grid(column = 1, row = 7, sticky = W)
      Label(hmFrame, textvariable = playerScore).grid(column = 1, row = 8,
                                                      sticky = W)
      Label(hmFrame, text = "Losses").grid(column = 3, row = 7, sticky = W)
      Label(hmFrame, textvariable = computerScore).grid(column = 3, row = 8,
                                                        sticky = W)
      Label(hmFrame, textvariable = resultSet).grid(column = 2, row = 9)
      replayButton = Button(hmFrame, text = "Reset",
                            command = resetGame).grid(column = 2, row = 10)
  </code></pre>