如何在Tkinter中使用Button绑定定义以在窗口中显示结果?

时间:2017-11-05 19:38:06

标签: python python-3.x tkinter

此代码必须计算坐标以得到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

最重要的部分;我想用Button连接公式名为“oblicz_button”

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

1 个答案:

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