鸽了好久,出了好几趟差,ok,又打回原形了,前几天摸代码连转义都想了半天(最后突然想起Py根本不用定义类型),
我真的佛了。
开了个新坑Pywinauto,主要是App[][].这个看着比较顺眼(主要是pywinauto有在更新),
所以就选pywinauto来练练手吧。
前面的诸如什么怎么找控件名字怎么找句柄怎么连接绑定这些就略过了,
用vs画了一堆输入框的窗口;
输入框名是edit1~22,所以循环里面应该是这样的:
for i in range(1, 23):
# text_box_list['list_'+str(i)] = dlg_test.edit % i
# text_box_list['list_' + str(i)].set_text("test"+str(i))
# check_edit = eval("edit" + i)
# dlg_test.check_edit.set_text("test" + str(i))
# dlg_test.text_box_list['edit%s' % i].set_text("test"+str(i))
说笑的,上面的都没能起作用,那单次调用来说:
dlg_test.edit1.set_text("test"+str(i))
这当中edit1是什么类型呢,我没太搞清楚,总之用动态变量的方法是没能解决问题的;
所以最后还是靠了eval来解决问题:
def text_execute(text_box_num):
return eval("dlg_test.edit"+str(text_box_num)+".set_text(\"test\""+"+str("+str(text_box_num)+"))")
for i in range(1, 23):
text_execute(i)
time.sleep(0.01)
这里为什么要str(str())这样呢
是因为从调用的时候来说输入的是一个int类型,但是eval里面要str
如果直接将int网上传的话(实质上是无定义的):
def text_execute(text_box_num):
# return eval("dlg_test.edit"+str(text_box_num)+".set_text(\"test\""+"+str("+str(text_box_num)+"))")
return eval("dlg_test.edit"+str(text_box_num)+".set_text(\"test\""+"+"+str(text_box_num)+")")
就会报错:
return eval("dlg_test.edit"+str(text_box_num)+".set_text(\"test\""+"+"+str(text_box_num)+")")
File "<string>", line 1, in <module>
TypeError: can only concatenate str (not "int") to str
所以就将计就计, str(str())咯,
所以说Py这个定义数据,爽起来是爽,憨起来也憨
实际效果如上,非常爽;
如果要清空的话直接set_text("")就ok了
def text_execute(text_box_num):
return eval("dlg_test.edit"+str(text_box_num)+".set_text(\"test\""+"+str("+str(text_box_num)+"))")
def text_execute_clear(text_box_num):
return eval("dlg_test.edit"+str(text_box_num)+".set_text(\"\")")
# text_box_list = locals()
for i in range(1, 23):
text_execute(i)
time.sleep(0.01)
text_execute_clear(i)
time.sleep(0.01)
(实际上一般情况下哪里有那么多不命名的text_box,我就是要看着爽才这样整的)
最近沉迷日麻,一个不留神,就年末了(中间学了啥都没写下来)