我是一名電氣工程師,我是Python編程新手。Tkinter錯誤類型變量
我想寫一個三相變壓器計算器的Python程序。該程序非常簡單,只需要幾個代數運算;我寫了沒有GUI的簡單的Python代碼,它工作得很好。所以我決定使用Tkinter模塊製作相同的程序,爲我的應用程序提供GUI。我有一些錯誤,我讀了很多問題,並問了很多關於這個社區的問題,但我無法解決它。我無法追查錯誤的原因。代碼是:
from tkinter import *
from math import *
finestra=Tk()
finestra.geometry('800x800+300+300')
finestra.title('Dimensionamento Trasformatore')
def calcola(Vn,Vn2,Sn,Vcc,V_spira,f,Bmax,mu,J,w,Snf,N1,N2,If1,If2,kv,ki,fi,fi_c,S_colonna,S_conduttore1,S_conduttore2,Sezione_netta_cu1,Sezione_netta_cu2,Vf1,Vf2):
try:
#lettura caselle di testo/ read entry
Vn=float(Vn_s.get())
Vn2=float(Vn2_s.get())
Vcc=float(Vcc_s.get())
V_spira=float(Vspira_s.get())
Sn=float(Sn_s.get())
J=float(J_s.get())
mu=float(mu_s.get())
Bmax=float(Bmax_s.get())
f=float(f_s.get())
except ValueError:
print('inserito valore sbagliato')
else:
#calcoli/calculate
if (var_1.get()==1):
collegamento1='triangolo'
else:
collegamento1='stella'
if (var_2.get()==1):
collegamento2='triangolo'
else:
collegamento2='stella'
Snf=(Sn/3.0)
w=(2*pi*f)
if (collegamento1=='triangolo'):
Vf1=Vn
else:
Vf1=(Vn/sqrt(3))
if (collegamento2=='triangolo'):
Vf2=(Vn2)
else:
Vf2=(Vn2/sqrt(3))
N1=Vf1/V_spira
N2=Vf2/V_spira
If1=Snf/Vf1
If2=(Snf/Vf2)
kv=Vf1/Vf2
ki=If2/If1
fi=Vf1/(w*N1)
fi_c=(N1*fi)
S_colonna=(fi_c/(Bmax*sqrt(2)))
S_conduttore1=(If1/J)
S_conduttore2=(If2/J)
# Sezione_netta_cu1.set(S_conduttore1*N1/k_stip_cu)
# Sezione_netta_cu2.set(S_conduttore2*N2/k_stip_cu)
testo_23=Label(finestra,text=str(N1)).grid(sticky=W,row=4,column=5)
testo_24=Label(finestra,text=str(N2)).grid(sticky=W,row=6,column=5)
testo_25=Label(finestra,text=str(kv)).grid(sticky=W,row=11,column=5)
testo_26=Label(finestra,text=str(ki)).grid(sticky=W,row=13,column=5)
testo_27=Label(finestra,text=str(fi_c)).grid(sticky=W,row=21,column=5)
testo_28=Label(finestra,text=str(S_colonna)).grid(sticky=W,row=25,column=5)
testo_29=Label(finestra,text=str(S_conduttore1)).grid(sticky=W,row=19,column=5)
testo_30=Label(finestra,text=str(S_conduttore2)).grid(sticky=W,row=17,column=5)
## testo_31=Label(finestra,text=str(Sezione_netta_cu1)).grid(sticky=W,row=16,column=5)
## testo_32=Label(finestra,text=str(Sezione_netta_cu2)).grid(sticky=W,row=8,column=5)
## testo_33=Label(finestra,text=str(N1)).grid(sticky=W,row=14,column=5)
## testo_34=Label(finestra,text=str(N1)).grid(sticky=W,row=22,column=5)
return;
#Testi/label
testo_0=Label(finestra,text="Parametri di ingresso:").grid(sticky=W,row=0,column=0)
testo_1=Label(finestra,text="Collegamento primario:").grid(sticky=W,row=3,column=0)
testo_2=Label(finestra,text="Collegamento secondario:").grid(sticky=W,row=5,column=0)
testo_3=Label(finestra,text="Tensione nominale concatenata primaria:").grid(sticky=W,row=10,column=0)
testo_4=Label(finestra,text="Tensione nominale concatenata secondaria:").grid(sticky=W,row=12,column=0)
testo_5=Label(finestra,text="Induzione massima:").grid(sticky=W,row=20,column=0)
testo_6=Label(finestra,text="Densita di corrente:").grid(sticky=W,row=24,column=0)
testo_7=Label(finestra,text="Frequenza:").grid(sticky=W,row=18,column=0)
testo_8=Label(finestra,text="Tensione di corto circuito:").grid(sticky=W,row=16,column=0)
testo_9=Label(finestra,text="Potenza apparente nominale:").grid(sticky=W,row=8,column=0)
testo_10=Label(finestra,text="Volt-spira:").grid(sticky=W,row=14,column=0)
testo_11=Label(finestra,text="Permeabilita del ferro:").grid(sticky=W,row=22,column=0)
testo_12=Label(finestra,text="Valori calcolati:").grid(sticky=W,row=0,column=5)
testo_13=Label(finestra,text="Numero spire primario:").grid(sticky=W,row=3,column=5)
testo_14=Label(finestra,text="Numero spire secondario:").grid(sticky=W,row=5,column=5)
testo_15=Label(finestra,text="Rapporto trasformazione tensione:").grid(sticky=W,row=10,column=5)
testo_16=Label(finestra,text="Rapporto trasformazione corrente:").grid(sticky=W,row=12,column=5)
testo_17=Label(finestra,text="Flusso concatenato efficace:").grid(sticky=W,row=20,column=5)
testo_18=Label(finestra,text="Sezione colonna:").grid(sticky=W,row=24,column=5)
testo_19=Label(finestra,text="Sezione conduttore primario:").grid(sticky=W,row=18,column=5)
testo_20=Label(finestra,text="Sezione conduttore secondario:").grid(sticky=W,row=16,column=5)
testo_21=Label(finestra,text="Sezione avvolgimento primario netta:").grid(sticky=W,row=8,column=5)
testo_22=Label(finestra,text="Sezione avvolgimento secondario netta:").grid(sticky=W,row=14,column=5)
#variabili
If1=DoubleVar()
If2=DoubleVar()
N1=DoubleVar()
N2=DoubleVar()
var_1=IntVar()
var_2=IntVar()
Vn=DoubleVar()
Vf1=DoubleVar()
Vf2=DoubleVar()
Vn2=DoubleVar()
Vcc=DoubleVar()
V_spira=DoubleVar()
Sn=DoubleVar()
Snf=DoubleVar()
J=DoubleVar()
mu=DoubleVar()
Bmax=DoubleVar()
f=DoubleVar()
Vn_s=StringVar()
Vn2_s=StringVar()
Vcc_s=StringVar()
Vspira_s=StringVar()
Sn_s=StringVar()
J_s=StringVar()
mu_s=StringVar()
Bmax_s=StringVar()
f_s=StringVar()
collegamento1=StringVar()
collegamento2=StringVar()
w=DoubleVar()
kv=DoubleVar()
ki=DoubleVar()
fi=DoubleVar()
fi_c=DoubleVar()
S_colonna=DoubleVar()
S_conduttore1=DoubleVar()
S_conduttore2=DoubleVar()
Sezione_netta_cu1=DoubleVar()
Sezione_netta_cu2=DoubleVar()
#Radiobutton
#collegamento primario/ first winding
collegamentoI_1=Radiobutton(finestra,text='triangolo',value=1,variable=var_1)
collegamentoI_1.grid(row=4,column=0)
collegamentoI_2=Radiobutton(finestra,text='stella',value=2,variable=var_1)
collegamentoI_2.grid(row=4,column=1)
#collegamento secondario/ second winding
collegamentoII_1=Radiobutton(finestra,text='triangolo',value=1,variable=var_2)
collegamentoII_1.grid(row=6,column=0)
collegamentoII_2=Radiobutton(finestra,text='stella',value=2,variable=var_2)
collegamentoII_2.grid(row=6,column=1)
#caselle di testo/entry
Vn_=Entry(finestra,textvariable=Vn_s)
Vn_.grid(row=11,column=0)
Vspira_=Entry(finestra,textvariable=Vspira_s)
Vspira_.grid(row=15,column=0)
Vn2_=Entry(finestra,textvariable=Vn2_s)
Vn2_.grid(row=13,column=0)
Sn_=Entry(finestra,textvariable=Sn_s)
Sn_.grid(row=9,column=0)
Bmax_=Entry(finestra,textvariable=Bmax_s)
Bmax_.grid(row=21,column=0)
mu_=Entry(finestra,textvariable=mu_s)
mu_.grid(row=23,column=0)
Vcc_=Entry(finestra,textvariable=Vcc_s)
Vcc_.grid(row=17,column=0)
f_=Entry(finestra,textvariable=f_s)
f_.grid(row=19,column=0)
J_=Entry(finestra,textvariable=J_s)
J_.grid(row=25,column=0)
#Calculatebutton
gobutton=Button(finestra,text='Calcola',command=calcola(Vn,Vn2,Sn,Vcc,V_spira,f,Bmax,mu,J,w,Snf,N1,N2,If1,If2,kv,ki,fi,fi_c,S_colonna,S_conduttore1,S_conduttore2,Sezione_netta_cu1,Sezione_netta_cu2,Vf1,Vf2))
gobutton.grid(row=28, column=3)
finestra.mainloop()
我遇到的第一種錯誤是ValueError: could not convert string to float
。我讀這可能會發生,因爲在開始時,入口小部件是空的,所以Python可以將其轉換爲浮動。所以我加了try/except塊。現在,當我啓動程序時,它會在除了block外打印一條錯誤消息(我無法理解這一點:calcola函數與計算按鈕相關聯,但似乎在開始時無按鈕運行該功能)不會發生其他事情,儘管在輸入框中輸入數字並按下計算按鈕。我懷疑的是,我使用函數的方式是錯誤的(語法或其他)。如果有人能幫助我,我會很感激。
對不起,對英文不好。非常感謝你。 尼古拉
本身非capisci好處LA MIA risposta scrivi魁嘀咕於Italiano。 – Veltro
Ciao Liam,ti ringrazio infinitamente per la tua risposta。 Se posso approfittare della tua gentilezza ti vorrei chiedere delle spiegazioni。 Dunque prima di tutto ho corretto il codice e funziona perfettamente,perònon capisco lamba esattamente a cosa serva。如果你沒有意識到你的錯誤,那麼你可以在這裏找到你想要的東西。 L'errore era solo quello? Grazie ancora stavo impazzendo。 –
Mi spiego meglio :(premettendo che so programmare,ma non a livello pro,in C e matlab e pochissimo fortran)dalla mia esperienza una function non dovrebbe essere eseguita ad inizio codice。 Sto cercando in rete delle spiegazioni ma francamente non mièmolto chiaro il funzionamento。 –