2017-05-11 6 views
0

Ich versuche, etwas Code mit Tkinter zu schreiben. Ich versuche derzeit, eine Variable zu erstellen, die den Wert eines Eintrags (ttk.Entry) verwendet, aber wenn ich versuche, diesen Wert in eine Ganzzahl zu konvertieren, wird der Wert PY_VAR0. Hier ist der Code:int (variable.entry.get) Rückgabe von PY_VAR0 bei Verwendung von Tkinter

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() 

Antwort

0

Ich sehe ein paar Dinge.

  1. def fracalculator(): hat nichts in der es so den Rest des Codes wahrscheinlich einen Fehler werfen. Ich habe einfach pass hineingesteckt, um Ihren Code zu testen.

  2. müssen Sie Ihre root = tkinter.Tk() irgendwo an der Spitze verschieben. Es sollte nicht hinter irgendetwas sein, das sich auf root bezieht, und in Ihrem Fall ist root.withdraw() davor und dies wird einen Fehler verursachen.

  3. vielleicht verstehe ich nicht, warum Sie verwenden:

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

aber ich würde verwenden:

fracdec = int(numfracentry.get())/int(denfracentry.get()) 
fracper = int(numfracentry.get())/(int(denfracentry.get())*100) 
  1. wie für die PY_VAR0 Sache. Ich glaube, es bezieht sich auf das Objekt tkinter.intVar. Sie sollten .get() verwenden, um den Wert des intVar-Objekts abzurufen.

Versuchen Sie es mit diesen statt

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() 
Verwandte Themen