此代码必须计算坐标以得到3个结果。现在它只是一个带有一些输入的窗口,但根本没有动作(我希望应用程序计算取决于不同输入的公式)。
from tkinter import *
import math
class Calculator:
def __init__(self, master):
self.master = master
master.title("Oblicz wyznacznik, iloczyn wektorowy i roznice")
vcmd = master.register(self.validate) # we have to wrap the command
self.entry = Entry(master, validate="key", validatecommand=(vcmd,
'%P'))
self.zamknij_button = Button(master,
text='Zamknij',command=master.quit)
**#show result**
self.oblicz_button = Button(master, text='Oblicz',
command=lambda:self.update)
# LAYOUT ONLY
self.xa_label = Label(master, text="XA")
self.xa_label.grid(row=0)
self.ya_label = Label(master, text="YA")
self.ya_label.grid(row=1)
self.xb_label = Label(master, text="XB")
self.xb_label.grid(row=2)
self.yb_label = Label(master, text="YB")
self.yb_label.grid(row=3)
self.xp_label = Label(master, text="XP")
self.xp_label.grid(row=4)
self.yp_label = Label(master, text="YP")
self.yp_label.grid(row=5)
self.e7_label = Label(master, text="Wyznacznik =")
self.e7_label.grid(row=7)
self.e8_label = Label(master, text="Iloczyn wektorowy =")
self.e8_label.grid(row=8)
self.e9_label = Label(master, text="Roznica =")
self.e9_label.grid(row=9)
self.zamknij_button.grid(row=10, column=1, sticky=W, pady=5)
self.oblicz_button.grid(row=6, column=1, sticky=W, pady=4)
self.xa = Entry(master)
self.ya = Entry(master)
self.xb = Entry(master)
self.yb = Entry(master)
self.xp = Entry(master)
self.yp = Entry(master)
self.xa.grid(row=0, column=1)
self.ya.grid(row=1, column=1)
self.xb.grid(row=2, column=1)
self.yb.grid(row=3, column=1)
self.xp.grid(row=4, column=1)
self.yp.grid(row=5, column=1)
self.xa.insert(10, 6123456.123)
self.ya.insert(10, 3123456.123)
self.xb.insert(10, 6123459.123)
self.yb.insert(10, 3123458.123)
self.xp.insert(10, 6123457.123)
self.yp.insert(10, 3123458.123)
#Important part
def validate(self, new_text):
if not new_text: # the field is being cleared
self.e7 = 0
return True
try:
self.e7 = int(new_text)
return True
except ValueError:
return False
def update(self):
self.e7.values(xa, ya, xb, yb, xp, yp)
self.e7= (xa * xb) + (xb * yp) + (xp * ya) - (ya * xb) - (yb
* xp) - (yp * xa)
self.e7_label_text.set(self.e7)
root = Tk()
my_gui = Calculator(root)
root.mainloop()
答案 0 :(得分:0)
from tkinter import *
import math
class Calculator:
def __init__(self, master):
self.master = master
master.title("Oblicz wyznacznik, iloczyn wektorowy i roznice")
vcmd = master.register(self.validate) # we have to wrap the command
self.entry = Entry(master, validate="key", validatecommand=(vcmd,
'%P'))
self.zamknij_button = Button(master,
text='Zamknij',command=master.quit)
#show result**
self.oblicz_button = Button(master, text='Oblicz',
command=lambda:self.update())
# LAYOUT ONLY
self.Wyz = DoubleVar() #used so that the value in the entry updates
self.Ilo = DoubleVar() #used so that the value in the entry updates
self.Roz = DoubleVar() #used so that the value in the entry updates
self.xa_label = Label(master, text="XA")
self.xa_label.grid(row=0)
self.ya_label = Label(master, text="YA")
self.ya_label.grid(row=1)
self.xb_label = Label(master, text="XB")
self.xb_label.grid(row=2)
self.yb_label = Label(master, text="YB")
self.yb_label.grid(row=3)
self.xp_label = Label(master, text="XP")
self.xp_label.grid(row=4)
self.yp_label = Label(master, text="YP")
self.yp_label.grid(row=5)
self.e7_label = Label(master, text="Wyznacznik =")
self.e7_label.grid(row=7)
self.e7 = Entry(master, textvariable = self.Wyz)
self.e7.grid(row = 7, column = 1) #layout for Wyz answer the textvariable makes it so that when the value of self.Wyz updates so does the result on GUI, same goes for other two,
self.e8_label = Label(master, text="Iloczyn wektorowy =")
self.e8_label.grid(row=8)
self.e8 = Entry(master, textvariable = self.Ilo) #use for Iloczyn
self.e8.grid(row = 8, column = 1)
self.e9_label = Label(master, text="Roznica =")
self.e9_label.grid(row=9)
self.e9 = Entry(master, textvariable = self.Roz) #use for Roznica
self.e9.grid(row = 9, column = 1)
self.zamknij_button.grid(row=10, column=1, sticky=W, pady=5)
self.oblicz_button.grid(row=6, column=1, sticky=W, pady=4)
self.xa = Entry(master)
self.ya = Entry(master)
self.xb = Entry(master)
self.yb = Entry(master)
self.xp = Entry(master)
self.yp = Entry(master)
self.xa.grid(row=0, column=1)
self.ya.grid(row=1, column=1)
self.xb.grid(row=2, column=1)
self.yb.grid(row=3, column=1)
self.xp.grid(row=4, column=1)
self.yp.grid(row=5, column=1)
self.xa.insert(10, 6123456.123)
self.ya.insert(10, 3123456.123)
self.xb.insert(10, 6123459.123)
self.yb.insert(10, 3123458.123)
self.xp.insert(10, 6123457.123)
self.yp.insert(10, 3123458.123)
#Important part
def validate(self, new_text):
if not new_text: # the field is being cleared
self.Wyz.set(0)
return True
try:
self.Wyz.set(int(new_text))
return True
except ValueError:
return False
def update(self):
xa = float(self.xa.get()) #Entry.get retrieves the value in the entry field it is a string that needs to be converted
ya = float(self.ya.get())
xb = float(self.xb.get())
yb = float(self.yb.get())
xp = float(self.xp.get())
yp = float(self.yp.get())
#self.e7.values(xa, ya, xb, yb, xp, yp)
Wy_result = (xa * xb) + (xb * yp) + (xp * ya) - (ya * xb) - (yb * xp) - (yp * xa)
self.Wyz.set(Wy_result)
print ("Wyz = %f") %Wy_result
root = Tk()
my_gui = Calculator(root)
root.mainloop()