Python 2.7.3 を使用して、次の tkinter コードを作成しました。このコードでは、ユーザーが 2 つの値を GUI に入力する必要があります。これらの値が送信され、GUI が閉じられます。ただし、送信ボタンに問題があります。ユーザーが [送信] をクリックすると、次のことが起こります。 1. 値 1 に値があるかどうかを確認する if ステートメントが表示されます。2. 値 2 に値があるかどうかを確認する if ステートメント、ない場合はメッセージ ボックスが表示されます。3. 値 1 と値 2 の両方に値がある場合、GUI は閉じられます。
ただし、これは私が問題を抱えている場所です。次のテストを実行しました。2. 値 1 に値を入力し、値 2 に値を入力しなかった場合、2 番目に if ステートメントがトリガーされました。これは問題ありませんでした。3. 値 1 と値 2 に値を入力すると、GUI が閉じられました。問題はありませんでしたが、Python コードがハングし、コードの最後の行「print c」が発生しませんでした。
これは何が原因ですか?
アイデアは、この GUI を関数ファイルの入力に使用することです。このコードは GUI のテストです。
import Tkinter
import sys
import tkMessageBox
class GUI(Tkinter.Tk):
"""docstring for Values"""
def __init__(self, parent):
Tkinter.Tk.__init__(self,parent)
self.parent = parent
###if user hits close button
def callback():
if tkMessageBox.askokcancel("Quit", "Do you really wish to quit?"):
self.destroy()
sys.exit()
self.protocol("WM_DELETE_WINDOW", callback)
self.initialize()
def initialize(self):
self.grid()
stepOne = Tkinter.LabelFrame(self, text=" 1. Enter Values ")
stepOne.grid(row=0, columnspan=7, sticky='W',padx=5, pady=5, ipadx=5, ipady=5)
self.Val1Lbl = Tkinter.Label(stepOne,text="Value 1")
self.Val1Lbl.grid(row=0, column=0, sticky='E', padx=5, pady=2)
self.Val1Txt = Tkinter.Entry(stepOne)
self.Val1Txt.grid(row=0, column=1, columnspan=3, pady=2, sticky='WE')
self.Val2Lbl = Tkinter.Label(stepOne,text="Value 2")
self.Val2Lbl.grid(row=1, column=0, sticky='E', padx=5, pady=2)
self.Val2Txt = Tkinter.Entry(stepOne)
self.Val2Txt.grid(row=1, column=1, columnspan=3, pady=2, sticky='WE')
self.val1 = None
self.val2 = None
self.SubmitBtn = Tkinter.Button(stepOne, text="Submit",command=self.submit)
self.SubmitBtn.grid(row=4, column=3, sticky='W', padx=5, pady=2)
def submit(self):
self.val1=self.Val1Txt.get()
if self.val1=="":
Win2=Tkinter.Tk()
Win2.withdraw()
tkMessageBox.showinfo(message="Value 1 has no values entered")
self.val2=self.Val2Txt.get()
if self.val2=="":
Win2=Tkinter.Tk()
Win2.withdraw()
tkMessageBox.showinfo(message="Value 2 has no values entered")
###Close GUI if Val1 and Val2 have values
if len(self.val2)>0 and len(self.val1)>0:
self.destroy()
app = GUI(None)
app.title('Values')
app.mainloop()
#calculate values of Val1 and Val2
a=float(app.val1)
b=float(app.val2)
c=a+b
print c