easigui的g.multenterbox()问题
本帖最后由 1011279979 于 2018-8-3 10:21 编辑在Python课后作业的答案中,碰到一个奇怪问题。如果将下面红色if语句缩进到for语句里面,弹出对话框中信息显示errmsg1不出现。
if语句的缩进应该不影响errmsg1的赋值,当它不为空时,应该会跳过这个if语句不执行。望高手予以解答
import easygui as g
msg = "请填写以下联系方式"
title = "账号中心"
fieldNames = [" *用户名", " *真实姓名", "固定电话", " *手机号码", "QQ", " *E-mail"]
fieldValues = []
fieldValues = g.multenterbox(msg,title, fieldNames)
while 1:
if fieldValues == None:
break
errmsg1 = "" # 只是在此处设定一个空的函数
for i in range(len(fieldNames)):
option = fieldNames.strip()
if fieldValues.strip() == "" and option == "*":
errmsg1 += ('【%s】为必填项。\n\n' % fieldNames)
if errmsg1 == "": # 代表一旦填完所有的信息,即可退出循环
break
fieldValues = g.multenterbox(errmsg1, title, fieldNames, fieldValues)
print("用户资料如下:%s" % str(fieldValues)) 假如把它缩进到for里面,就是每次检测用户是否填完整,假如填完整就退出for,while循环继续,无限弹出enterbox。
假如用户没有填完整信息,这个if不会执行,这时就重新弹出一个enterbox,假如用户还是没有填完整就继续填。(无限循环下去直到用户填完整了所有必填信息。) 无符号整形 发表于 2018-8-3 10:59
假如把它缩进到for里面,就是每次检测用户是否填完整,假如填完整就退出for,while循环继续,无限弹出enter ...
这个我理解,我不理解的是为什么弹出的enterbox中没有errmsg1信息。如果if语句没有缩进,errmsg1正常显示,如果if语句缩进,errmsg1信息不显示。这和是否填完整了必填信息无关。 嗯,我懂你的意思了。我刚刚也试了下,情况如下:
如果什么都不填,直接按ok的话,可以正常显示出errmsg的提示信息:“*用户名为必填项”;
但是只要你填了星号中的第一项(用户名)的话,就不再显示出errmsg的提示信息,因为errmsg里面是空的!
如果填了星号中的其他星号项目(除第一项),也可以正常显示出errmsg的提示信息。
我的理解是:
while第一次循环:
当你第一个*号(用户名)填写内容了,执行for循环i=0时,第一个if判断是false,对应的errmsg就没有执行(errmsg是空字符串);接着继续执行第二个if判断发现errmsg=空,就跳出for循环。
到这里第一次while循环就结束了。 然后再重新开始第二次while循环。
发现了吗?for循环,每次执行完i=0就跳出来了,都没机会执行i=1~5,所以errmsg一直都是初值(空字符串)。
页:
[1]