首页 > 解决方案 > 如何使用 tkinter 按钮和函数,使用 tk.Entry 中的变量?

问题描述

我正在尝试编写一些简单的代码来将变量放入一个简单的函数中,该函数使用温度和压力来计算名为 fO2 的输出。

我看不到如何更新输入变量,现在它使用 0。
此外,您输入的任何内容都会Temp_inputP_input.

from matplotlib.backends.backend_tkagg import *
from matplotlib.backend_bases import key_press_handler
from matplotlib.figure import Figure
import tkinter as tk  
   
   
root = tk.Tk()
root.title('Oxygen Fugacity')
root.geometry("500x400")

Temp_input = tk.Entry(root, width=15, borderwidth=5,textvariable=Tcinput)
Temp_input.grid(row=1,column=1)
P_input = tk.Entry(root, width=15, borderwidth=5,textvariable=Pinput)
P_input.grid(row=2,column=1)

Templabel = tk.Label(root,text='Temperature (C)').grid(row=1,column=0)
Plabel = tk.Label(root,text='Pressure (bar)').grid(row=2,column=0)

comp = tk.Button(root, text='Compute', command=lambda: all).grid(row=3,column=1)

Tcinput = tk.IntVar(master=root,value=Tcinput).get()
Pinput = tk.IntVar(master=root,value=Pinput).get()

tk.Label(root, text='NNO').grid(row=1,column=3,padx=(30,0),pady=(10,10))
tk.Label(root, text='FMQ').grid(row=2,column=3,padx=(30,0),pady=(10,10))
tk.Label(root, text='IW').grid(row=3,column=3,padx=(30,0),pady=(10,10))
tk.Label(root, text='MH').grid(row=4,column=3,padx=(30,0),pady=(10,10))
tk.Label(root, text='CoCoO').grid(row=5,column=3,padx=(30,0),pady=(10,10))
tk.Label(root, text='CCO').grid(row=6,column=3,padx=(30,0),pady=(10,10))

NNO_OUT = tk.Message(root, text = all(Tcinput,Pinput)[0]).grid(row=1,column=4,padx=(30,0))
FMQ_OUT = tk.Message(root, text = all(Tcinput,Pinput)[1]).grid(row=2,column=4,padx=(30,0))
IW_OUT = tk.Message(root, text = all(Tcinput,Pinput)[2]).grid(row=3,column=4,padx=(30,0))
MH_OUT = tk.Message(root, text = all(Tcinput,Pinput)[3]).grid(row=4,column=4,padx=(30,0))
CoCoO_OUT = tk.Message(root, text = all(Tcinput,Pinput)[4]).grid(row=5,column=4,padx=(30,0))
CCO_OUT = tk.Message(root, text = all(Tcinput,Pinput)[5]).grid(row=6,column=4,padx=(30,0))

root.mainloop()

def all(Tc=1200,P=1):
    a = str(round(fo2.NNO(Tc,P),2))
    b = str(round(fo2.FMQ(Tc,P),4))
    c = str(round(fo2.IW(Tc,P),4))
    d = str(round(fo2.MH(Tc,P),4))
    e = str(round(fo2.CoCoO(Tc,P),4))
    f = str(round(fo2.CCO(Tc,P),4))
    x=[a,b,c,d,e,f]
    return x

编辑

我已经编辑了代码,但按钮仍然不起作用,我尝试在函数上使用 lambda 和 ()

谁能看到问题?


from matplotlib.backends.backend_tkagg import *
from matplotlib.backend_bases import key_press_handler
from matplotlib.figure import Figure
import tkinter as tk  

   
def some_func():
    global Tcinput, Pinput
    Tc = Tcinput.get() #  GETTER
    P = Pinput.get() #  GETTER
    a = str(round(fo2.NNO(Tc,P),4))
    b = str(round(fo2.FMQ(Tc,P),4))
    c = str(round(fo2.IW(Tc,P),4))
    d = str(round(fo2.MH(Tc,P),4))
    e = str(round(fo2.CoCoO(Tc,P),4))
    f = str(round(fo2.CCO(Tc,P),4))
    x=[a,b,c,d,e,f]
    return x
   
root = tk.Tk()
root.title('Oxygen Fugacity')
root.geometry("500x400")

Tcinput = tk.IntVar(master=root,value=1200)  # NEW
Pinput = tk.IntVar(master=root,value=1)   # NEW
Temp_input = tk.Entry(root, width=15, borderwidth=5,textvariable=Tcinput)
Temp_input.grid(row=1,column=1)
P_input = tk.Entry(root, width=15, borderwidth=5,textvariable=Pinput)
P_input.grid(row=2,column=1)

Templabel = tk.Label(root,text='Temperature (C)').grid(row=1,column=0)
Plabel = tk.Label(root,text='Pressure (bar)').grid(row=2,column=0)

tk.Label(root, text='NNO').grid(row=1,column=3,padx=(30,0),pady=(10,10))
tk.Label(root, text='FMQ').grid(row=2,column=3,padx=(30,0),pady=(10,10))
tk.Label(root, text='IW').grid(row=3,column=3,padx=(30,0),pady=(10,10))
tk.Label(root, text='MH').grid(row=4,column=3,padx=(30,0),pady=(10,10))
tk.Label(root, text='CoCoO').grid(row=5,column=3,padx=(30,0),pady=(10,10))
tk.Label(root, text='CCO').grid(row=6,column=3,padx=(30,0),pady=(10,10))

comp = tk.Button(root, text='Compute', command=lambda: some_func()).grid(row=3,column=1)

NNO_OUT = tk.Message(root, text = some_func()[0]).grid(row=1,column=4,padx=(30,0))
FMQ_OUT = tk.Message(root, text = some_func()[1]).grid(row=2,column=4,padx=(30,0))
IW_OUT = tk.Message(root, text = some_func()[2]).grid(row=3,column=4,padx=(30,0))
MH_OUT = tk.Message(root, text = some_func()[3]).grid(row=4,column=4,padx=(30,0))
CoCoO_OUT = tk.Message(root, text = some_func()[4]).grid(row=5,column=4,padx=(30,0))
CCO_OUT = tk.Message(root, text = some_func()[5]).grid(row=6,column=4,padx=(30,0))

root.mainloop()


标签: pythontkinter

解决方案


根据我对代码的理解,您需要获取包含 Tc 和 P 值的 IntVar。这是新代码:

from matplotlib.backends.backend_tkagg import *
from matplotlib.backend_bases import key_press_handler
from matplotlib.figure import Figure
import tkinter as tk  
   
   
root = tk.Tk()
root.title('Oxygen Fugacity')
root.geometry("500x400")

Tcinput = IntVar(master=root,value=1200)  # NEW
Pinput = IntVar(master=root,value=1)   # NEW

def some_func():
    global Tcinput, Pinput
    Tc = Tcinput.get() #  GETTER
    P = Pinput.get() #  GETTER
    a = str(round(fo2.NNO(Tc,P),2))
    b = str(round(fo2.FMQ(Tc,P),4))
    c = str(round(fo2.IW(Tc,P),4))
    d = str(round(fo2.MH(Tc,P),4))
    e = str(round(fo2.CoCoO(Tc,P),4))
    f = str(round(fo2.CCO(Tc,P),4))
    x=[a,b,c,d,e,f]
    return x

Temp_input = tk.Entry(root, width=15, borderwidth=5,textvariable=Tcinput)
Temp_input.grid(row=1,column=1)
P_input = tk.Entry(root, width=15, borderwidth=5,textvariable=Pinput)
P_input.grid(row=2,column=1)

Templabel = tk.Label(root,text='Temperature (C)').grid(row=1,column=0)
Plabel = tk.Label(root,text='Pressure (bar)').grid(row=2,column=0)

comp = tk.Button(root, text='Compute', command=lambda: some_func()).grid(row=3,column=1)

tk.Label(root, text='NNO').grid(row=1,column=3,padx=(30,0),pady=(10,10))
tk.Label(root, text='FMQ').grid(row=2,column=3,padx=(30,0),pady=(10,10))
tk.Label(root, text='IW').grid(row=3,column=3,padx=(30,0),pady=(10,10))
tk.Label(root, text='MH').grid(row=4,column=3,padx=(30,0),pady=(10,10))
tk.Label(root, text='CoCoO').grid(row=5,column=3,padx=(30,0),pady=(10,10))
tk.Label(root, text='CCO').grid(row=6,column=3,padx=(30,0),pady=(10,10))

NNO_OUT = tk.Message(root, text = some_func()[0]).grid(row=1,column=4,padx=(30,0))
FMQ_OUT = tk.Message(root, text = some_func()[1]).grid(row=2,column=4,padx=(30,0))
IW_OUT = tk.Message(root, text = some_func()[2]).grid(row=3,column=4,padx=(30,0))
MH_OUT = tk.Message(root, text = some_func()[3]).grid(row=4,column=4,padx=(30,0))
CoCoO_OUT = tk.Message(root, text = some_func()[4]).grid(row=5,column=4,padx=(30,0))
CCO_OUT = tk.Message(root, text = some_func()[5]).grid(row=6,column=4,padx=(30,0))



root.mainloop()


推荐阅读