在此代码运行之后,我希望结果作为单独的文本行显示在消息框中,而不是作为元组(现在正在发生的事情)。基本上我想在消息框中看到结果,就像我在pyscripter中打印行一样:
print ext_str+ext,cnt_str,len(sz),max_str,max(sz),min_str,min(sz), avg_str,calc_avg(sz)
在消息框中给出一个如下所示的结果(但行可以换行):
文件类型:.mxd count:最多5个大小:3155968分钟。大小:467968平均大小:1383014.0 文件类型:.3dd计数:最多1个大小:836608分钟。大小:836608平均。大小:836608.0
我还希望能够在消息框中添加垂直滚动条,因为现在如果内容太长则无法关闭对话框。我似乎无法找到一种方法来使用easygui - 我知道tkinter可能是一个选项,但我真的不太了解它。这两件事可以完成吗?这是我的代码:
import os, sys, easygui
from collections import defaultdict
a_dir = easygui.enterbox("Type in directory path:",title='Directory Stats')
if a_dir is None or a_dir == '' :
sys.exit()
else:
os.chdir(a_dir)
mydir = os.listdir(os.curdir)
filedict = {}
ext_str = 'file type:'
cnt_str = 'count:'
max_str = 'max. size:'
min_str = 'min. size:'
avg_str = 'avg. size:'
smmry_title = 'Summary of directory contents: '+ a_dir
stats_lst = []
def calc_avg(num_list):
return round(sum (num_list) / len(num_list))
for file in mydir:
fileext = os.path.splitext(file)[1]
filesz = os.path.getsize(file)
filedict.setdefault(fileext,[]).append(filesz)
for ext, sz in filedict.items():
stats = ext_str+ext,cnt_str,len(sz),max_str,max(sz),min_str,min(sz), avg_str,calc_avg(sz)
stats_lst.append(stats)
stats_str = '\n'.join(map(str, stats_lst))
msg = easygui.msgbox(msg=stats_str,title=smmry_title)
答案 0 :(得分:0)
我知道您可以通过使用文本框或代码框来实现这一目标。您应该能够操纵输出为您工作。
http://easygui.sourceforge.net/tutorial/easygui_pydoc.html#-textbox
编辑:
这创造了我相信你正在寻找的东西。在第20行附近添加stats_print = []
和其他变量,你应该好好去。我还清理了你的stats
变量,以便为您提供更清晰的输出,以便每个变量都在同一行上打印。
for ext, sz in filedict.items():
stats = (
ext_str+ext, cnt_str+str(len(sz)), max_str+str(max(sz)),
min_str+str(min(sz)), avg_str+str(calc_avg(sz))
)
stats_lst.append(stats)
for item in stats_lst:
stats_str = '\n'.join(map(str, item))
stats_print.append('\n')
stats_print.append(stats_str)
msg = easygui.codebox(msg="",title=smmry_title, text=stats_print)