easygui消息框内容格式化并添加滚动条

问题描述 投票:0回答:1

此代码运行后,我希望结果作为单独的文本行出现在消息框中,而不是作为元组(现在正在发生)。本质上,我希望在消息框中看到结果,就像我在 pyscripter 中打印该行一样:

print ext_str+ext,cnt_str,len(sz),max_str,max(sz),min_str,min(sz), avg_str,calc_avg(sz)

在消息框中给出如下所示的结果(但行可以换行):

文件类型:.mxd 数量:最多 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)
python formatting scrollbar easygui
1个回答
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)
© www.soinside.com 2019 - 2024. All rights reserved.