Python tkinter:解析时出现意外的 EOF
Python tkinter : unexpected EOF while parsing
当我尝试使用 tkinter 创建一个转换程序时,我在解析时遇到了意外的 EOF 错误。这是我的代码:
from tkinter import *
from tkinter.ttk import *
class conversion:
def centi():
def centiMet():
meStr=a.get()
meStrc = eval(meStr)
con=meStrc/100
conS=str(con)
CenMet2=Label(root,text=conS + " Meters",font="CenturyGothic 12 bold").pack()
return
rootCm= Tk()
a = StringVar()
rootCm.geometry("500x300")
rootCm.title("Quick Reference Application - Version 0.1.8 [alpha] ")
label1= Label(rootCm,text="Unit Conversions",font="CenturyGothic 17 bold").pack()
inputCm= Entry(rootCm,textvariable=a).pack()
convButton1= Button(rootCm,text="Convert!",command = centiMet).pack()
root= Tk()
root.geometry("500x300")
root.title("Quick Reference Application - Version 0.1.8 [alpha] ")
label1= Label(root,text="Unit Conversions",font="CenturyGothic 17 bold").pack()
CenMet1= Label(root,text="Please select the type you want!!",font="CenturyGothic 12 bold").pack()
convButton1= Button(root,text="Centimeters to Meters",command = conversion.centi).pack()
点击厘米到米按钮并尝试转换后会出现错误。在我尝试制作一个按钮来为厘米到米启动一个新的 window 之前,它工作正常。有人有什么建议吗?
如您所见,问题似乎出在第二个 Tk()
元素上。我不是 100% 确定为什么会这样,但是如果您使用 Toplevel
window 来代替,它似乎可以工作。
class conversion:
def centi():
def centiMet():
meStr = a.get()
con = float(meStr) / 100
Label(rootCm, text="{} Meters".format(con), font="CenturyGothic 12 bold").pack()
rootCm = Toplevel()
rootCm.geometry("500x300")
a = StringVar()
Label(rootCm, text="Unit Conversions", font="CenturyGothic 17 bold").pack()
Entry(rootCm, textvariable=a).pack()
Button(rootCm, text="Convert!", command=centiMet).pack()
更多提示:
- 如果可以避免,请不要使用
eval
;使用 float
代替
label = Label(...).pack()
会将pack()
的结果赋值给label
,而不是实际的标签;另外,你似乎并不需要那些变量
- 不确定这是否是有意的,但您将结果标签添加到原始根目录,而不是弹出窗口-window
如果要在转换多个度量时重复使用相同的标签,请使用另一个 StringVar
:
class conversion:
def centi():
def centiMet():
b.set("{} Meters".format(float(a.get()) / 100))
...
b = StringVar()
Label(rootCm, textvariable=b, font="CenturyGothic 12 bold").pack()
当我尝试使用 tkinter 创建一个转换程序时,我在解析时遇到了意外的 EOF 错误。这是我的代码:
from tkinter import *
from tkinter.ttk import *
class conversion:
def centi():
def centiMet():
meStr=a.get()
meStrc = eval(meStr)
con=meStrc/100
conS=str(con)
CenMet2=Label(root,text=conS + " Meters",font="CenturyGothic 12 bold").pack()
return
rootCm= Tk()
a = StringVar()
rootCm.geometry("500x300")
rootCm.title("Quick Reference Application - Version 0.1.8 [alpha] ")
label1= Label(rootCm,text="Unit Conversions",font="CenturyGothic 17 bold").pack()
inputCm= Entry(rootCm,textvariable=a).pack()
convButton1= Button(rootCm,text="Convert!",command = centiMet).pack()
root= Tk()
root.geometry("500x300")
root.title("Quick Reference Application - Version 0.1.8 [alpha] ")
label1= Label(root,text="Unit Conversions",font="CenturyGothic 17 bold").pack()
CenMet1= Label(root,text="Please select the type you want!!",font="CenturyGothic 12 bold").pack()
convButton1= Button(root,text="Centimeters to Meters",command = conversion.centi).pack()
点击厘米到米按钮并尝试转换后会出现错误。在我尝试制作一个按钮来为厘米到米启动一个新的 window 之前,它工作正常。有人有什么建议吗?
如您所见,问题似乎出在第二个 Tk()
元素上。我不是 100% 确定为什么会这样,但是如果您使用 Toplevel
window 来代替,它似乎可以工作。
class conversion:
def centi():
def centiMet():
meStr = a.get()
con = float(meStr) / 100
Label(rootCm, text="{} Meters".format(con), font="CenturyGothic 12 bold").pack()
rootCm = Toplevel()
rootCm.geometry("500x300")
a = StringVar()
Label(rootCm, text="Unit Conversions", font="CenturyGothic 17 bold").pack()
Entry(rootCm, textvariable=a).pack()
Button(rootCm, text="Convert!", command=centiMet).pack()
更多提示:
- 如果可以避免,请不要使用
eval
;使用float
代替 label = Label(...).pack()
会将pack()
的结果赋值给label
,而不是实际的标签;另外,你似乎并不需要那些变量- 不确定这是否是有意的,但您将结果标签添加到原始根目录,而不是弹出窗口-window
如果要在转换多个度量时重复使用相同的标签,请使用另一个 StringVar
:
class conversion:
def centi():
def centiMet():
b.set("{} Meters".format(float(a.get()) / 100))
...
b = StringVar()
Label(rootCm, textvariable=b, font="CenturyGothic 12 bold").pack()