"TypeError: Can't convert 'NoneType' object to str implicitly" when var should have a value
Question: 
    import sys
    from tkinter import *
    def print():
        print("Encoded " + message + " with " + offset)
    
    gui = Tk()
    
    gui.title("Caesar Cypher Encoder")
    
    Button(gui, text="Encode", command=encode).grid(row = 2, column = 2)
    Label(gui, text = "Message").grid(row = 1, column =0)
    Label(gui, text = "Offset").grid(row = 1, column =1)
    message = Entry(gui).grid(row=2, column=0)
    offset = Scale(gui, from_=0, to=25).grid(row=2, column=1)
    
    mainloop( )
    

When i run this code with an input in both the input box and a value on the
slider - it comes up with the error

    
    
    >>>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 "C:/Users/xxxx/Desktop/Code/Functionised/GUI.pyw", line 5, in encode
    print("Encoded " + message + " with " + offset)
    TypeError: Can't convert 'NoneType' object to str implicitly
    

using a simple str() does not work by the way

EDIT

With the new code

    
    
    import sys
    from tkinter import *
    def printer():
        print(message)
        print(offset)
    
    gui = Tk()
    
    gui.title("Caesar Cypher Encoder")
    
    Button(gui, text="Encode", command=printer).grid(row = 2, column = 2)
    Label(gui, text = "Message").grid(row = 1, column =0)
    Label(gui, text = "Offset").grid(row = 1, column =1)
    message = Entry(gui)
    message.grid(row=2, column=0)
    offset = Scale(gui, from_=0, to=25)
    offset.grid(row=2, column=1)
    
    mainloop( )
    

It returns

    
    
    .46329264
    .46329296
    

EDIT 2

    
    
    def printer():
        print(message.get())
        print(offset.get())
    

this fixes the .xxxxxxxx problem


Answer: You are setting the variables `message` and `offset` to widgets but then you
position them on the same line, this makes them `Nonetype` objects, instead
position them on the next line e.g.:

    
    
    message = Entry(gui)
    message.grid(row=2, column=0)
    offset = Scale(gui, from_=0, to=25)
    offset.grid(row=2, column=1)
    

this should solve your problem, but also, it's not advised to use `from
tkinter import *` rather `import tkinter as tk`, and your function `print()`
should be differently named (not the same as a python keyword) so that it is
less confusing and prevents errors, make it `printer()` or similar to be on
the safe side.

Hope this helps you!

