title: How to fix "Exception in tkinter callback": "unsupported operand type(s)" in Python
body: <p>I'm using Python 3 and I'm very, very new to Python. I'm trying to create a game and the code I have is working like it is supposed to, but when it's run, it gives me an error of some sort. (P.S. I know it would be cleaner if it were just turtle and not tkinter and turtle... It's for a project though so I do not have a choice, I have to use both.)</p>
  
  <p>It says "Exception in Tkinter callback" and then provides me with this information:</p>
  
  <blockquote>
    <p>line 60, in combinedSpanishCommands
       span() + spanishFlag()
    TypeError: unsupported operand type(s) for +: 'NoneType' and 'NoneType'</p>
  </blockquote>
  
  <p>What is the problem here? I apologize for my lack of knowledge. Please be kind. I appreciate any help you can provide.</p>
  
  <p>I don't understand the problem so I have not really tried anything. So if someone can look at my code and explain and show the problem, that would be great! Below is my code for the maze game. If you see any problems that need fixing, please let me know and show me. Thank you in advance.</p>
  
  <pre><code>from turtle import RawTurtle, TurtleScreen
  import tkinter
  from tkinter import PhotoImage
  
  largefont = ("Verdana", 12)
  
  # Define function to create Spanish level.
  def span():
      pen.setup(level_1)
      player.setup(level_1)
      setup(level_1)
  
  # Define function to create French level.
  def fren():
      pen.setup(level_2)
      player.setup(level_2)
      setup(level_2)
  
  # Define function to create Japanese level.
  def jpn():
      pen.setup(level_3)
      player.setup(level_3)
      setup(level_3)
  
  # Define function to create Turkish level.
  def turk():
      pen.setup(level_4)
      player.setup(level_4)
      setup(level_4)
  
  # Create window and canvas using tkinter.
  root = tkinter.Tk()
  root.title("Language Labyrinth")
  
  canvas = tkinter.Canvas(root, width=600, height=600)
  canvas.pack()
  
  screen = TurtleScreen(canvas)
  screen.bgcolor('black')
  
  # Define a function to set flag background for Spanish level
  def spanishFlag():
      screen.bgpic("spainflag.png")
  
  # Define a function to set flag background for French level
  def frenchFlag():
      screen.bgpic("franceflaggrunge.png")
  
  # Define a function to set flag background for Japanese level        
  def japaneseFlag():
      screen.bgpic("japanflagoffwhite.png")
  
  # Define a function to set flag background for Turkish level
  def turkishFlag():
      screen.bgpic("turkishflagdiagonal.png")
  
  # Define a function to combine the level and background setup functions for Spanish level
  def combinedSpanishCommands():
      span() + spanishFlag()
  
  # Define a function to combine the level and background setup functions for French level
  def combinedFrenchCommands():
      fren() + frenchFlag()
  
  # Define a function to combine the level and background setup functions for Japanese level
  def combinedJapaneseCommands():
      jpn() + japaneseFlag()
  
  # Define a function to combine the level and background setup functions for Turkish level
  def combinedTurkishCommands():
      turk() + turkishFlag()
  
  # Create class with separate window to choose level.
  class StartPage():
      def __init__(self):
          # Creation of second window.
          wn = tkinter.Tk()
          wn.title("Welcome!")
          # Creation of game title on start page.
          label = tkinter.Label(wn, text="Language Labyrinth", font=largefont)
          label.pack()
  
          # Create Spanish level button.
          button = tkinter.Button(wn, text="Spanish", command= combinedSpanishCommands)
          button.pack()
  
          # Create French level button.
          button2 = tkinter.Button(wn, text="French", command= combinedFrenchCommands)
          button2.pack()
  
          # Create Japanese level button.
          button3 = tkinter.Button(wn, text="Japanese", command= combinedJapaneseCommands)
          button3.pack()
  
          # Create Turkish level button.
          button4 = tkinter.Button(wn, text="Turkish", command= combinedTurkishCommands)
          button4.pack()
  
          # Create quit button for start page.
          qbutton = tkinter.Button(wn, text="Quit", command=wn.destroy)
          qbutton.pack()
  
  start = StartPage()
  
  # Create Pen class to draw the maze.
  class Pen(RawTurtle):
      def __init__(self):
          super().__init__(screen, shape='square')
          self.speed('fastest')
          self.color('white')
          self.penup()
  
      # Create setup so the maze will be drawn.
      def setup(self, level):
          for y in range(len(level)):
              screen_y = 288 - (y * 24)
  
              for x in range(len(level[y])):
                  if level[y][x] == 'X':
                      screen_x = (x * 24) - 288
  
                      self.goto(screen_x, screen_y)
                      self.stamp()
  
                      walls.append((screen_x, screen_y))
  
  # Create player class to have a player.
  class Player(RawTurtle):
      def __init__(self):
          super().__init__(screen, shape='square')
          self.penup()
          self.speed('fastest')
          self.color('black')
  
      def bKey(self):
          global color
          print("b key pressed")
          self.color('blue')
  
      def rKey(self):
          global color
          print("r key pressed")
          self.color('red')
  
      def gKey(self):
          global color
          print("g key pressed")
          self.color('green')
  
      def pKey(self):
          global color
          print("p key pressed")
          self.color('purple')
  
      def yKey(self):
          global color
          print("y key pressed")
          self.color('goldenrod')
  
      def oKey(self):
          global color
          print("o key pressed")
          self.color('orange')
  
      # Create setup to create the player on the screen.
      def setup(self, level):
          for y in range(len(level)):
              for x in range(len(level[y])):
                  if level[y][x] == 'P':
                      screen_x = (x * 24) - 288
                      screen_y = 288 - (y * 24)
  
                      self.goto(screen_x, screen_y)
  
                      return
  
      # Define a function that will allow player to move up.
      def move_up(self):
          # Calculate the spot to move to.
          movetoX = self.xcor()
          movetoY = self.ycor() + 24
  
          # Check if the space has a wall.
          if (movetoX, movetoY) not in walls:
              self.goto(movetoX, movetoY)
  
              gold_encounter()
  
      # Define a function that will allow player to move down.
      def move_down(self):
          # Calculate the spot to move to.
          movetoX = self.xcor()
          movetoY = self.ycor() - 24
  
          # Check if the space has a wall.
          if (movetoX, movetoY) not in walls:
              self.goto(movetoX, movetoY)
  
              gold_encounter()
  
      # Define a function that will allow player to move left.
      def move_left(self):
          # Calculate the spot to move to.
          movetoX = self.xcor() - 24
          movetoY = self.ycor()
  
          # Check if the space has a wall.
          if (movetoX, movetoY) not in walls:
              self.goto(movetoX, movetoY)
  
              gold_encounter()
  
      # Define a function that will allow player to move right.
      def move_right(self):
          # Calculate the spot to move to.
          movetoX = self.xcor() + 24
          movetoY = self.ycor()
  
          # Check if the space has a wall.
          if (movetoX, movetoY) not in walls:
              self.goto(movetoX, movetoY)
  
              gold_encounter()
  
      # Check if player touches the question.
      def collision(self, other):
          return self.distance(other) &lt; 5
  
  # Create Question class to create the "gold" in the game.
  class Question(RawTurtle):
      def __init__(self, x, y):
          super().__init__(screen, shape='circle', visible=False)
          self.speed('fastest')
          self.color('hotpink')
          self.penup()
          self.goto(x, y)
          self.showturtle()
  
      # Define function that will remove gold when collided with.
      def destroy(self):
          self.hideturtle()
  
  # Define function to setup the "gold" in the game.
  def setup(level):
      for y in range(len(level)):
          for x in range(len(level[y])):
              char = level[y][x]
  
              screen_x = -288 + (x * 24)
              screen_y = 288 - (y * 24)
  
              if char == 'Q':
                  questions.append(Question(screen_x, screen_y))
  
  # Define a function for the quit button.
  def quitPlaying():
      root.destroy()
      root.quit()
  
  # Game loop in regards to the gold.
  def gold_encounter():
      # Check for player collision with a question.
      # Iterate through the questions list.
      for question in questions:
          if player.collision(question):
              # Destroy the question.
              question.destroy()
              # Remove question from questions list.
              questions.remove(question)
  
  # Create frame where button(s) will be.
  frame = tkinter.Frame(root)
  frame.pack()
  
  # Add questions list.
  questions = []
  
  # Wall coordinate list.
  walls = []
  
  # Create a levels list.
  levels = []
  
  # Define first level.
  level_1 = [
  "XXXXXXXXXXXXXXXXXXXXXXXXX",
  "XP XXXXXXX          XXXXX",
  "X  XXXXXXX  XXXXXX  XXXXX",
  "X       XX  XXXXXX  XXXXX",
  "X       XX  XXX        XX",
  "XXXXXX  XX  XXX   Q    XX",
  "XXXXXX  XX  XXXXXX  XXXXX",
  "XXXXXX  XX    XXXX  XXXXX",
  "X  XXX Q      XXXX  XXXXX",
  "X  XXX  XXXXXXXXXXXXXXXXX",
  "X         XXXXXXXXXXXXXXX",
  "X     Q          XXXXXXXX",
  "XXXXXXXXXXXX     XXXXX  X",
  "XXXXXXXXXXXXXXX  XXXXX  X",
  "XXX  XXXXXXXXXX         X",
  "XXX               Q     X",
  "XXX         XXXXXXXXXXXXX",
  "XXXXXXXXXX  XXXXXXXXXXXXX",
  "XXXXXXXXXX              X",
  "XX   XXXXX        Q     X",
  "XX   XXXXXXXXXXXXX  XXXXX",
  "XX    XXXXXXXXXXXX  XXXXX",
  "XX    Q     XXXX        X",
  "XXXX                    X",
  "XXXXXXXXXXXXXXXXXXXXXXXXX"
  ]
  
  # Define second level.
  level_2 = [
  "XXXXXXXXXXXXXXXXXXXXXXXXX",
  "XP  XX       XX      XXXX",
  "X   XX       XX      XXXX",
  "X   XXXXXXX  XX  XX     X",
  "X   XXXXXXX  XX  XX Q   X",
  "X   XX   XX  XX  XXXXX  X",
  "X   XX   XX  XX  XXXXX  X",
  "XQ         Q     XX  X  X",
  "X                XX  X  X",
  "X   XXXXXXX   XXXXX  XXXX",
  "X   XX   XX             X",
  "XXXXXX   XX        Q    X",
  "XXXXXX   XXXXXXXXXXXX   X",
  "X      Q      XX   XX   X",
  "X             XX   XX   X",
  "XXXXXXXXXX    XX        X",
  "XXXXXX   X    XX     Q  X",
  "XXXXXX   X    XX   XX   X",
  "X                 X  X  X",
  "X       Q         X  X  X",
  "XXXXXX   XXXXXXXXXX  X  X",
  "XXXXXX   XXXXXXXXXX     X",
  "X         X             X",
  "X         XQ     XXXXXXXX",
  "XXXXXXXXXXXXXXXXXXXXXXXXX"
  ]
  
  # Define third level.
  level_3 = [
  "XXXXXXXXXXXXXXXXXXXXXXXXX",
  "X      X   XP           X",
  "X    Q X   X            X",
  "X   XXXX   XXXXXXXXXX   X",
  "X   XXXX   XXXXXXXXXX   X",
  "X         Q    XX       X",
  "X              XX       X",
  "XXXXXXXXXXXX   XXXX   XXX",
  "X              XXXX   XXX",
  "X              XXXX   XXX",
  "XXXXX Q XXXXXXXXXXX   XXX",
  "X                   Q   X",
  "X                       X",
  "XXXXXXXXXX Q  XXXXXXX   X",
  "XXXXXXXXXX    XXXXXXX   X",
  "XXXX         XXXXXXXXX  X",
  "XXX      XXXXXXXXX      X",
  "XXXXXX   XXXXXXXXXXXX   X",
  "X            X      Q   X",
  "X  Q         X       XXXX",
  "XXXXXXX            XXXXXX",
  "XXXXXXXXXXXX Q XXXXXXXXXX",
  "X                       X",
  "X Q         XXX       Q X",
  "XXXXXXXXXXXXXXXXXXXXXXXXX"
  ]
  
  # Define fourth level.
  level_4 = [
  "XXXXXXXXXXXXXXXXXXXXXXXXX",
  "XXXXXXXXXX  P  XXXXXXXXXX",
  "XXXXXXXXXX     XXXXXXXXXX",
  "XXXXXXXXXXX Q XXXXXXXXXXX",
  "X                       X",
  "X          XXX          X",
  "XXXXX  Q  XXXXX  Q  XXXXX",
  "X          XXX          X",
  "XXXXXXXX    X    XXXXXXXX",
  "X Q         X         Q X",
  "X           X           X",
  "XXXXXXXXXX QXQ XXXXXXXXXX",
  "X                       X",
  "X                       X",
  "XXXXXXXXXXXXXXXXXXXXX   X",
  "XXXXXXXXXXXXXXXXXXXXX   X",
  "XXXXXX   XXXXXXXXX      X",
  "XXXXXX   XXXXXXX Q  XXXXX",
  "XQ                      X",
  "X                       X",
  "XXXXXXXXXXX   XXXXXXX   X",
  "XXXXXXXX      XXXXXXX   X",
  "XXXXXX     XXXXXXXXXX   X",
  "XXXXX  Q XXXXXXXXXXX Q  X",
  "XXXXXXXXXXXXXXXXXXXXXXXXX"
  ]
  
  # Add the level(s) to the levels list.
  levels.append(level_1)
  levels.append(level_2)
  levels.append(level_3)
  levels.append(level_4)
  
  # Class instances.
  pen = Pen()
  player = Player()
  
  # Creation of quit button.
  quitButton = tkinter.Button(frame, text='Quit', command=quitPlaying)
  quitButton.pack()
  
  # Button commands for player movement
  screen.onkeypress(player.move_up, 'Up')
  screen.onkeypress(player.move_down, 'Down')
  screen.onkeypress(player.move_left, 'Left')
  screen.onkeypress(player.move_right, 'Right')
  
  # Button commands for customizable player colors 
  screen.onkeypress(player.bKey, "b")
  screen.onkeypress(player.rKey, "r")
  screen.onkeypress(player.gKey, "g")
  screen.onkeypress(player.pKey, "p")
  screen.onkeypress(player.yKey, "y")
  screen.onkeypress(player.oKey, "o")
  
  screen.listen()
  
  # Call main game loop.
  screen.mainloop()
  
  </code></pre>
  
  <p>Like I said, the game itself is working like it should, but it just gets that "Exception" message so there must be some problem.
  Thanks again in advace.</p>