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问题
答案 0 :(得分:1)
您要将变量message
和offset
设置为小部件,然后将它们放在同一条线上,这会使它们成为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)