使用的是python的tkinter模塊,大概就是用一個按鈕打開了子視窗并且在子視窗里運行函式,但是
我運行的結果并沒有回傳子視窗,只是子串口有數值,求求哪個大佬替我看看,特別著急。
import tkinter
import tkinter.messagebox
import math
def abc():
root = tkinter.Tk()
root.title('颶風浪相關引數的計算')
root.geometry('600x300')
varVF = tkinter.StringVar()
varVF.set('')
varP0 = tkinter.StringVar()
varP0.set('')
varθ = tkinter.StringVar()
varθ.set('')
#varf = tkinter.StringVar()
#varf.set('')
varR=tkinter.StringVar()
varR.set('')
varHmax=tkinter.StringVar()
varHmax.set('')
varTmax=tkinter.StringVar()
varTmax.set('')
#創建VF標簽及輸入文本框
labelVF=tkinter.Label(root, text='VF風速(m/s):')
labelVF.place(x=10, y=50, width=140, height=20)
entryVF =tkinter.Entry(root,textvariable=varVF)
entryVF.place(x=125, y=50, width=40, height=20)
#創建P0標簽及輸入文本框
labelP0 = tkinter.Label(root, text='P0颶風中心氣壓(hpa):')
labelP0.place(x=220, y=50, width=140, height=20)
entryP0=tkinter.Entry(root,textvariable=varP0)
entryP0.place(x=355,y=50,width=40,height=20)
#創建科氏力引數f標簽及輸入文本框
#labelf = tkinter.Label(root, text='f(科氏力引數):')
#labelf.place(x=340, y=30, width=80, height=20)
#entryf = tkinter.Entry(root,textvariable=varf)
#entryf.place(x=420, y=30, width=40, height=20)
#創建緯度a標簽及輸入文本框
labelθ = tkinter.Label(root, text='θ緯度():')
labelθ.place(x=440, y=50, width=80, height=20)
entryθ = tkinter.Entry(root,textvariable=varθ)
entryθ.place(x=515, y=50, width=40, height=20)
#創建颶風中心到最大風速的距離R標簽及文本框
labelR = tkinter.Label(root, text='R距離(km):')
labelR.place(x=220, y=240, width=80, height=20)
entryR = tkinter.Entry(root,textvariable=varR)
entryR.place(x=310, y=240, width=40, height=20)
#創建Hmax標簽及文本框
labelHmax = tkinter.Label(root, text='Hmax最大波高(m):')
labelHmax.place(x=80, y=200, width=140, height=20)
entryHmax = tkinter.Entry(root,textvariable=varHmax)
entryHmax.place(x=220, y=200, width=40, height=20)
#創建Tmax標簽及文本框
labelTmax = tkinter.Label(root, text='Tmax最大波長周期(s):')
labelTmax.place(x=330, y=200, width=150, height=20)
entryTmax = tkinter.Entry(root,textvariable=varTmax)
entryTmax.place(x=490, y=200 ,width=40, height=20)
def 確認():
#確認按鈕事件處理函式
#獲取VF,P0,θ
VF = entryVF.get()
P0 = entryP0.get()
θ = entryθ.get()
#f = entryf.get()
#R = entryR.get()
α=float(1.0)
#ΔP= 760-float(P0)/5
VF=float(VF)
θ=float(θ)
P0=float(P0)
ΔP= 760-P0*0.75
f=0.5235*math.sin(θ)
#f=0.525*math.sin(θ)
R=28.52*math.tanh(0.0873*(θ-28.0))+12.22*math.exp((P0-1013.3)/33.86)+0.2*VF*3.6+37.22
f=float(f)
R=float(R)
Umax=float(0.447*(14.5*pow(ΔP,1/2)-R*0.31*f))#計算海面上10m高程處最大梯度風速m/s
if VF==0 : #判斷颶風是靜止還是移動
UR=0.865*Umax
elif VF>0:
UR=0.865*Umax+0.5*VF
Hmax=float(5.03*math.exp(R*ΔP/4700)*(1+0.29*α*VF/pow(UR,1/2)))
Tmax=float(8.6*math.exp(R*ΔP/9400)*(1+0.145*α*VF/pow(UR,1/2)))
print(Hmax)
print(Tmax)
print(R)
varHmax.set(Hmax)
varTmax.set(Tmax)
varR.set(R)
#創建按鈕組件,同時設定按鈕事件處理函式
buttonOk= tkinter.Button(root, text='確認', fg="blue",command=確認)
buttonOk.place(x=210, y=130, width=50, height=20)
#取消按鈕的事件處理函式
def 取消():
#清空用戶輸入的數
varVF.set('')
varP0.set('')
varθ.set('')
varR.set('')
varHmax.set('')
varTmax.set('')
buttonCancel = tkinter.Button(root, text='取消',fg="blue", command=取消)
buttonCancel.place(x=350, y=130, width=50, height=20)
#buttonOk.destroy()
top.destroy()
#啟動訊息回圈
root.mainloop()
top = tkinter.Tk()
top.title('dingzhaoyang')
top.geometry('600x300')
Ok = tkinter.Button(top, text='dzy', fg="blue",command=abc)
Ok.place(x=250, y=130, width=50, height=20)
top.mainloop()
uj5u.com熱心網友回復:
沒看明白你的問題,你提供的代碼有問題。 子視窗不能用 Tk() 新建 , 這樣試試
def abc():
root = tkinter.Tk()
改為
def abc():
root = tkinter..Toplevel()
uj5u.com熱心網友回復:
我改完之后,主視窗出來了,我點擊按鈕之后子視窗沒出來
uj5u.com熱心網友回復:
復制的時候, 多了個點
def abc():
root = tkinter.Toplevel()
uj5u.com熱心網友回復:
我試了還是不行,好像是我的子視窗文本變數出現了問題,但我不知道怎么改,我輸出了結果,并且給了文本框,但就是不顯示
uj5u.com熱心網友回復:
你為什么要在啟動子視窗時, 干掉 主視窗。 那就整個TK退出啦。
# encoding: utf-8
"""
@author: 謝盛壯
@contact: [email protected]
@version: 1.0
@file: tk_test3.py
@time: 2020/3/27 0027 12:41
說明
"""
import tkinter
import tkinter.messagebox
import math
def abc():
root = tkinter.Toplevel()
root.title('颶風浪相關引數的計算')
root.geometry('600x300')
varVF = tkinter.StringVar()
varVF.set('')
varP0 = tkinter.StringVar()
varP0.set('')
varθ = tkinter.StringVar()
varθ.set('')
# varf = tkinter.StringVar()
# varf.set('')
varR = tkinter.StringVar()
varR.set('')
varHmax = tkinter.StringVar()
varHmax.set('')
varTmax = tkinter.StringVar()
varTmax.set('')
# 創建VF標簽及輸入文本框
labelVF = tkinter.Label(root, text='VF風速(m/s):')
labelVF.place(x=10, y=50, width=140, height=20)
entryVF = tkinter.Entry(root, textvariable=varVF)
entryVF.place(x=125, y=50, width=40, height=20)
# 創建P0標簽及輸入文本框
labelP0 = tkinter.Label(root, text='P0颶風中心氣壓(hpa):')
labelP0.place(x=220, y=50, width=140, height=20)
entryP0 = tkinter.Entry(root, textvariable=varP0)
entryP0.place(x=355, y=50, width=40, height=20)
# 創建科氏力引數f標簽及輸入文本框
# labelf = tkinter.Label(root, text='f(科氏力引數):')
# labelf.place(x=340, y=30, width=80, height=20)
# entryf = tkinter.Entry(root,textvariable=varf)
# entryf.place(x=420, y=30, width=40, height=20)
# 創建緯度a標簽及輸入文本框
labelθ = tkinter.Label(root, text='θ緯度():')
labelθ.place(x=440, y=50, width=80, height=20)
entryθ = tkinter.Entry(root, textvariable=varθ)
entryθ.place(x=515, y=50, width=40, height=20)
# 創建颶風中心到最大風速的距離R標簽及文本框
labelR = tkinter.Label(root, text='R距離(km):')
labelR.place(x=220, y=240, width=80, height=20)
entryR = tkinter.Entry(root, textvariable=varR)
entryR.place(x=310, y=240, width=40, height=20)
# 創建Hmax標簽及文本框
labelHmax = tkinter.Label(root, text='Hmax最大波高(m):')
labelHmax.place(x=80, y=200, width=140, height=20)
entryHmax = tkinter.Entry(root, textvariable=varHmax)
entryHmax.place(x=220, y=200, width=40, height=20)
# 創建Tmax標簽及文本框
labelTmax = tkinter.Label(root, text='Tmax最大波長周期(s):')
labelTmax.place(x=330, y=200, width=150, height=20)
entryTmax = tkinter.Entry(root, textvariable=varTmax)
entryTmax.place(x=490, y=200, width=40, height=20)
def 確認():
# 確認按鈕事件處理函式
# 獲取VF,P0,θ
VF = entryVF.get()
P0 = entryP0.get()
θ = entryθ.get()
# f = entryf.get()
# R = entryR.get()
α = float(1.0)
# ΔP= 760-float(P0)/5
VF = float(VF)
θ = float(θ)
P0 = float(P0)
ΔP = 760 - P0 * 0.75
f = 0.5235 * math.sin(θ)
# f=0.525*math.sin(θ)
R = 28.52 * math.tanh(0.0873 * (θ - 28.0)) + 12.22 * math.exp((P0 - 1013.3) / 33.86) + 0.2 * VF * 3.6 + 37.22
f = float(f)
R = float(R)
Umax = float(0.447 * (14.5 * pow(ΔP, 1 / 2) - R * 0.31 * f)) # 計算海面上10m高程處最大梯度風速m/s
if VF == 0: # 判斷颶風是靜止還是移動
UR = 0.865 * Umax
elif VF > 0:
UR = 0.865 * Umax + 0.5 * VF
Hmax = float(5.03 * math.exp(R * ΔP / 4700) * (1 + 0.29 * α * VF / pow(UR, 1 / 2)))
Tmax = float(8.6 * math.exp(R * ΔP / 9400) * (1 + 0.145 * α * VF / pow(UR, 1 / 2)))
print(Hmax)
print(Tmax)
print(R)
varHmax.set(Hmax)
varTmax.set(Tmax)
varR.set(R)
# 創建按鈕組件,同時設定按鈕事件處理函式
buttonOk = tkinter.Button(root, text='確認', fg="blue", command=確認)
buttonOk.place(x=210, y=130, width=50, height=20)
# 取消按鈕的事件處理函式
def 取消():
# 清空用戶輸入的數
varVF.set('')
varP0.set('')
varθ.set('')
varR.set('')
varHmax.set('')
varTmax.set('')
buttonCancel = tkinter.Button(root, text='取消', fg="blue", command=取消)
buttonCancel.place(x=350, y=130, width=50, height=20)
# buttonOk.destroy()
# top.destroy() 為什么要 有這句??
# 啟動訊息回圈
root.mainloop()
top = tkinter.Tk()
top.title('dingzhaoyang')
top.geometry('600x300')
Ok = tkinter.Button(top, text='dzy', fg="blue", command=abc)
Ok.place(x=250, y=130, width=50, height=20)
top.mainloop()
uj5u.com熱心網友回復:
我剛開始是想把主視窗關掉,但是后來我刪掉這一句還是不行,數值還是不顯示
uj5u.com熱心網友回復:
我整出來了,謝謝大佬,我剛開始把輸出也設為空了。。。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/68428.html
上一篇:動態視頻爬取問題
下一篇:pymysql如何使用列名訪問
