我正在尝试用Tkinter编写一些代码。我目前正在尝试创建一个使用条目值(ttk.Entry)的变量,但每当我尝试将该值转换为整数时,该值就变为PY_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()
答案 0 :(得分:0)
我看到了一些事情。
def fracalculator():
内部没有任何内容,因此其余代码可能会抛出错误。我只是将pass
放在其中以测试您的代码。
您需要将root = tkinter.Tk()
移到顶部的某个位置。它不应该超过任何引用root的内容,在你的情况下它前面有root.withdraw()
,这会导致错误。
也许我不明白你使用的原因:
fracdec.set(int(numfrac.entry.get) / int(denfrac.entry.get()))
fracper.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)
PY_VAR0
的事情。我相信它是参考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()