" TypeError:无法转换' NoneType'反对str含义"当var应该有一个值

时间:2014-11-08 21:41:24

标签: python tkinter python-3.4

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( )

当我使用输入框中的输入和滑块上的值运行此代码时,会出现错误

>>>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

使用简单的str()不能正常工作

修改

使用新代码

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( )

返回

.46329264
.46329296

编辑2

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

这解决了.xxxxxxxx问题

2 个答案:

答案 0 :(得分:1)

您要将变量messageoffset设置为小部件,然后将它们放在同一条线上,这会使它们成为Nonetype个对象,而是将它们放在下一行,例如:

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

这可以解决您的问题,但也不建议使用from tkinter import *而不是import tkinter as tk,并且您的函数print()应该有不同的名称(不同于一个python关键字)这样可以减少混淆并防止错误,使其printer()或类似的安全。

希望这能帮到你!

答案 1 :(得分:1)

在回答您的第一次编辑时,.get()命令应该是最有用的

的形式使用它
print(message.get())

而不是

print(message)