【问题标题】:Python tkinter : unexpected EOF while parsingPython tkinter:解析时出现意外的EOF
【发布时间】:2015-07-24 15:05:13
【问题描述】:

当我尝试使用 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()

单击厘米到米按钮并尝试转换后,将显示错误。在我尝试制作一个按钮以启动一个厘米到米的新窗口之前,它工作正常。有人有什么建议吗?

【问题讨论】:

  • 一个 tkinter GUI 不应该有两个 Tk 实例。如果您需要更多窗口,请使用 Toplevel 的实例。

标签: python python-3.x tkinter ttk


【解决方案1】:

正如您所注意到的,问题似乎出在第二个 Tk() 元素上。我不是 100% 确定为什么会出现这种情况,但如果您改用 Toplevel 窗口,它似乎可以工作。

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,而不是实际的标签;此外,您似乎也不需要这些变量
  • 不确定这是否是故意的,但您将结果标签添加到原始根目录,而不是弹出窗口

如果您想在转换多个度量时重复使用相同的标签,请使用另一个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()

【讨论】:

  • 谢谢你现在它的工作,但标签不会自行替换......它只是不断添加到最后一个标签的底部。有什么可以解决的吗?
  • @Poom1997 是在弹出窗口中添加标签,即rootCm,还是在主窗口中,即root
  • rootCm(在弹出窗口先生)
  • @Poom1997 您可以为此使用另一个 StringVar。查看我的编辑。
猜你喜欢
  • 2021-03-21
  • 2011-07-15
  • 1970-01-01
  • 2013-04-25
  • 2017-10-03
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多