Python中Tkinter中的While循环以插入数据
我是Tkinter的新手,在Python中Tkinter中的While循环以插入数据,python,while-loop,coding-style,tkinter,Python,While Loop,Coding Style,Tkinter,我是Tkinter的新手,在def save中导入数据的While循环中遇到问题。 这是一个例子。我有两个数值变量变量1和变量2,它们必须是: 数字(空和字符串无效)。当V1或V2不可用时 此时会出现一条有效的消息窗口 当变量2大于80时,会出现一条消息并询问 确认 我很难理解这是否是最好的方式,以及如何定位突破 from Tkinter import * import tkMessageBox class MainWindow(Frame): def __init__(self):
def save中导入数据的While循环中遇到问题。
这是一个例子。我有两个数值变量变量1和变量2,它们必须是:
数字(空和字符串无效)。当V1或V2不可用时
此时会出现一条有效的消息窗口
当变量2大于80时,会出现一条消息并询问
确认
我很难理解这是否是最好的方式,以及如何定位突破
from Tkinter import *
import tkMessageBox
class MainWindow(Frame):
def __init__(self):
Frame.__init__(self)
self.master.title("input")
self.master.minsize(250, 150)
self.grid(sticky=E+W+N+S)
self.res=StringVar()
self.res.set("---")
top=self.winfo_toplevel()
top.rowconfigure(0, weight=1)
top.columnconfigure(0, weight=1)
for i in range(4):self.rowconfigure(i, weight=1)
self.columnconfigure(1, weight=1)
self.label0 = Label(self, text="value 1 ")
self.label0.grid(row=0, column=0, padx=2)
self.entry0 = Entry(self)
self.entry0.grid(row=0, column=1, pady=2, padx=2, sticky=E+W+N+S)
self.label1 = Label(self, text="value 2 ")
self.label1.grid(row=1, column=0, padx=2)
self.entry1 = Entry(self)
self.entry1.grid(row=1, column=1, pady=2, padx=2, sticky=E+W+N+S)
self.button1 = Button(self, text="Save", command=self.save)
self.button1.grid(row=2, column=0, columnspan=2, pady=2, padx=2, sticky=E+W+N+S)
self.result = Label(self, textvariable=self.res)
self.result.grid(row=3, column=0, columnspan=2, pady=2, padx=2, sticky=E+W+N+S)
def save(self):
while True:
v1 = self.entry0.get()
if not v1:
tkMessageBox.showwarning(title="Warning message box", message="The Value 1 is empty")
else:
try:
v1 = float(v1)
break
except:
tkMessageBox.showwarning(title="Warning message box", message="The value 1 is not a numeric value")
while True:
v2 = self.entry1.get()
if not v2:
tkMessageBox.showwarning(title="Warning message box", message="The Value 2 is empty")
else:
try:
v2 = float(v2)
if v2 >= 80:
if tkMessageBox.askyesno(title="Value 2",message="The value 2 is %s. Are you sure?" % v2) == 1:
v2 = v2
break
else:
break
except:
tkMessageBox.showwarning(title="Warning message box", message="The value 2 is not a numeric value")
self.res.set(str(v1 * v2))
if __name__=="__main__":
d=MainWindow()
d.mainloop()
我不会在save()函数中使用While循环。mainloop()使窗体保持打开状态。去掉那些While循环,它们不是必需的,当您单击没有值的按钮时,它将在无限循环中运行。还可以使用IntVar()而不是StringVar()来避免先转换为float,然后再转换为string
删除,同时执行循环
由于现在没有循环,请删除break
相应地缩进
您的最终代码可能如下所示:
from Tkinter import *
import tkMessageBox
class MainWindow(Frame):
def __init__(self):
Frame.__init__(self)
self.master.title("input")
self.master.minsize(250, 150)
self.grid(sticky=E+W+N+S)
self.res=StringVar()
self.res.set("---")
top=self.winfo_toplevel()
top.rowconfigure(0, weight=1)
top.columnconfigure(0, weight=1)
for i in range(4):self.rowconfigure(i, weight=1)
self.columnconfigure(1, weight=1)
self.label0 = Label(self, text="value 1 ")
self.label0.grid(row=0, column=0, padx=2)
self.entry0 = Entry(self)
self.entry0.grid(row=0, column=1, pady=2, padx=2, sticky=E+W+N+S)
self.label1 = Label(self, text="value 2 ")
self.label1.grid(row=1, column=0, padx=2)
self.entry1 = Entry(self)
self.entry1.grid(row=1, column=1, pady=2, padx=2, sticky=E+W+N+S)
self.button1 = Button(self, text="Save", command=self.save)
self.button1.grid(row=2, column=0, columnspan=2, pady=2, padx=2, sticky=E+W+N+S)
self.result = Label(self, textvariable=self.res)
self.result.grid(row=3, column=0, columnspan=2, pady=2, padx=2, sticky=E+W+N+S)
def save(self):
v1 = self.entry0.get()
if not v1:
tkMessageBox.showwarning(title="Warning message box", message="The Value 1 is empty")
else:
try:
v1 = float(v1)
except:
tkMessageBox.showwarning(title="Warning message box", message="The value 1 is not a numeric value")
v2 = self.entry1.get()
if not v2:
tkMessageBox.showwarning(title="Warning message box", message="The Value 2 is empty")
else:
try:
v2 = float(v2)
if v2 >= 80:
if tkMessageBox.askyesno(title="Value 2",message="The value 2 is %s. Are you sure?" % v2) == 1:
v2 = v2
else:
pass
except:
tkMessageBox.showwarning(title="Warning message box", message="The value 2 is not a numeric value")
self.res.set(str(v1 * v2))
if __name__=="__main__":
d=MainWindow()
d.mainloop()