Python int(variable.entry.get)在使用Tkinter时返回PY_VAR0

Python int(variable.entry.get)在使用Tkinter时返回PY_VAR0,python,tkinter,Python,Tkinter,我正试图用Tkinter编写一些代码。我目前正在尝试创建一个使用条目值(ttk.entry)的变量,但每当我尝试将该值转换为整数时,该值就会变成PY\u VAR0。代码如下: import tkinter from tkinter import * from tkinter import ttk from fractions import Fraction import time def fracalculator(): def fracalculate(): fracdec

我正试图用Tkinter编写一些代码。我目前正在尝试创建一个使用条目值(ttk.entry)的变量,但每当我尝试将该值转换为整数时,该值就会变成
PY\u VAR0
。代码如下:

import tkinter
from tkinter import *
from tkinter import ttk
from fractions import Fraction
import time

def fracalculator():

def fracalculate():
        fracdec.set(int(numfrac.entry.get) / int(denfrac.entry.get()))
        fracper.set((int(numfrac.entry.get) / int(denfrac.entry.get()))*100)
        print(fracdec)
        print(fracper)
        ttk.Label(mainframe, text="Your results:").grid(column=1, row=7, sticky=W)
        ttk.Label(mainframe, textvariable=numfrac).grid(column=1, row=9, sticky=W)
        ttk.Label(mainframe, text="/").grid(column=1, row=9)
        ttk.Label(mainframe, textvariable=denfrac).grid(column=1, row=9, sticky=E)
        ttk.Label(mainframe, text="=").grid(column=2, row=9, sticky=W)
        ttk.Label(mainframe, textvariable=fracdec).grid(column=2, row=9)
        ttk.Label(mainframe, text="=").grid(column=2, row=9, sticky=E)
        ttk.Label(mainframe, textvariable=fracper).grid(column=3, row=9)


numfrac = IntVar()
denfrac = IntVar()
null = StringVar()
null2 = StringVar()
null3 = StringVar()
root.withdraw()
fracalc = tkinter.Tk()
fracalc.title("SuperCalculator")
mainframe = ttk.Frame(fracalc, padding="3 3 12 12")
mainframe.grid(column=0, row=0, sticky=(N, W, E, S))
mainframe.columnconfigure(0, weight=1)
mainframe.rowconfigure(0, weight=1)
ttk.Label(mainframe, text="Numerator (Top)").grid(column=1, row=1, sticky=(W))
ttk.Label(mainframe, text="Denominator (Bottom)").grid(column=1, row=3, sticky=(W))
ttk.Label(mainframe, textvariable=null).grid(column=2, row=2)
ttk.Label(mainframe, textvariable=null2).grid(column=2, row=4)
ttk.Label(mainframe, textvariable=null3).grid(column=2, row=6)
numfrac.entry = ttk.Entry(mainframe, width=20, textvariable=numfrac)
numfrac.entry.grid(column=3, row=1, sticky=(E))
denfrac.entry = ttk.Entry(mainframe, width=20, textvariable=denfrac)
denfrac.entry.grid(column=3, row=3, sticky=(E))
ttk.Button(mainframe, text="Calculate!", command=fracalculate).grid(column=2, row=5)


root = tkinter.Tk()
root.title("SuperCalculator")

mainframe = ttk.Frame(root, padding="3 3 12 12")
mainframe.grid(column=0, row=0, sticky=(N, W, E, S))
mainframe.columnconfigure(0, weight=1)
mainframe.rowconfigure(0, weight=1)

fracdec = StringVar()
fracper = StringVar()

ttk.Label(mainframe, text="Welcome to SuperCalculator!").grid(column=2, row=1, sticky=(W, E))
ttk.Button(mainframe, text="Start with a Fraction", 
command=fracalculator).grid(column=1, row=3)

root.mainloop()
我看到了一些事情

  • def fracalculator():
    中没有任何内容,因此代码的其余部分可能会抛出错误。我只是把
    pass
    放在里面测试你的代码

  • 您需要将
    root=tkinter.Tk()
    移动到顶部的某个位置。它不应该超过任何引用root的内容,在您的情况下,它前面有
    root.draw()
    ,这将导致错误

  • 也许我不明白你为什么使用:

  • fracdec.set(int(numfrac.entry.get)/int(denfrac.entry.get())
    frapper.set((int(numfrac.entry.get)/int(denfrac.entry.get())*100)

    但我会使用:

    fracdec = int(numfracentry.get()) / int(denfracentry.get())
    fracper = int(numfracentry.get()) / (int(denfracentry.get())*100)
    
  • 至于那件事。我相信它是在引用tkinter.intVar对象。您应该使用
    .get()
    获取intVar对象的值
  • 试着用这个代替

    import tkinter
    from tkinter import *
    from tkinter import ttk
    from fractions import Fraction
    import time
    
    root = tkinter.Tk()
    root.title("SuperCalculator")
    
    def fracalculator():
        pass
    
    def fracalculate():
        fracdec = int(numfrac.entry.get()) / int(denfrac.entry.get())
        fracper = int(numfrac.entry.get()) / (int(denfrac.entry.get())*100)
        print(fracdec)
        print(fracper)
        ttk.Label(mainframe, text="Your results:").grid(column=1, row=7, sticky=W)
        ttk.Label(mainframe, textvariable=numfrac).grid(column=1, row=9, sticky=W)
        ttk.Label(mainframe, text="/").grid(column=1, row=9)
        ttk.Label(mainframe, textvariable=denfrac).grid(column=1, row=9, sticky=E)
        ttk.Label(mainframe, text="=").grid(column=2, row=9, sticky=W)
        ttk.Label(mainframe, textvariable=fracdec).grid(column=2, row=9)
        ttk.Label(mainframe, text="=").grid(column=2, row=9, sticky=E)
        ttk.Label(mainframe, textvariable=fracper).grid(column=3, row=9)
    
    numfrac = IntVar()
    denfrac = IntVar()
    null = StringVar()
    null2 = StringVar()
    null3 = StringVar()
    root.withdraw()
    fracalc = tkinter.Tk()
    fracalc.title("SuperCalculator")
    mainframe = ttk.Frame(fracalc, padding="3 3 12 12")
    mainframe.grid(column=0, row=0, sticky=(N, W, E, S))
    mainframe.columnconfigure(0, weight=1)
    mainframe.rowconfigure(0, weight=1)
    ttk.Label(mainframe, text="Numerator (Top)").grid(column=1, row=1, sticky=(W))
    ttk.Label(mainframe, text="Denominator (Bottom)").grid(column=1, row=3, sticky=(W))
    ttk.Label(mainframe, textvariable=null).grid(column=2, row=2)
    ttk.Label(mainframe, textvariable=null2).grid(column=2, row=4)
    ttk.Label(mainframe, textvariable=null3).grid(column=2, row=6)
    numfrac.entry = ttk.Entry(mainframe, width=20, textvariable=numfrac)
    numfrac.entry.grid(column=3, row=1, sticky=(E))
    denfrac.entry = ttk.Entry(mainframe, width=20, textvariable=denfrac)
    denfrac.entry.grid(column=3, row=3, sticky=(E))
    ttk.Button(mainframe, text="Calculate!", command=fracalculate).grid(column=2, row=5)
    
    mainframe = ttk.Frame(root, padding="3 3 12 12")
    mainframe.grid(column=0, row=0, sticky=(N, W, E, S))
    mainframe.columnconfigure(0, weight=1)
    mainframe.rowconfigure(0, weight=1)
    
    fracdec = StringVar()
    fracper = StringVar()
    
    ttk.Label(mainframe, text="Welcome to SuperCalculator!").grid(column=2, row=1, sticky=(W, E))
    ttk.Button(mainframe, text="Start with a Fraction", 
    command=fracalculator).grid(column=1, row=3)
    
    root.mainloop()