0

このコードを実行した後、結果をタプルとしてではなく、個別のテキスト行としてメッセージ ボックスに表示したいと考えています (これは現在起こっていることです)。基本的に、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がオプションになる可能性があることは知っていますが、あまりよく知りません。この2つはできるのでしょうか?これが私のコードです:

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)
4

1 に答える 1

0

テキストボックスまたはコードボックスを使用してそれを達成できることを私は知っています。出力を操作して機能させることができるはずです。

http://easygui.sourceforge.net/tutorial/easygui_pydoc.html#-textbox

編集:

これは、あなたが探していると私が信じているものを作成しています。stats_print = []20行目あたりに他の変数を追加すると、準備完了です。また、変数をクリーンアップして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)
于 2013-09-23T20:48:38.243 に答える