使用Python 2.7.3,我创建了以下tkinter代码。该代码要求用户在GUI中输入两个值,这些值将被提交并且GUI将被关闭。但是我遇到了提交按钮的问题。当用户单击提交时,会发生以下情况: 1. if语句,用于确认值1是否具有值,如果不是,则显示消息框。 2. if语句,用于确认值2是否具有值,如果不是,则显示消息框。 3.如果值1和值2都有值,则GUI将关闭。
然而,这是我遇到问题的地方,我进行了以下测试: 1.输入值2的值,没有值1的值,第一个if语句被触发,这很好。 2.输入值1的值,没有值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
答案 0 :(得分:0)
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 == "":
tkMessageBox.showinfo(message="Value 1 has no values entered")
return
self.val2 = self.Val2Txt.get()
if self.val2 == "":
tkMessageBox.showinfo(message="Value 2 has no values entered")
return
###Close GUI if Val1 and Val2 have values
if self.val1 and self.val2:
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