小甲鱼《零基础学习Python》课后笔记(三十五):グラフィックユーザーインタフェース入門——EasyGui
手を動かすまず手を練習して、私たちの最初の数字を当てる小さなゲームにインタフェースを加えましょうか?
1.ユーザーアカウント情報を登録するためのインタフェースを実現する(*番号付きの必須項目であれば、必ず入力があり、スペースではないことが要求される).
2.ユーザーが開くテキストファイルを選択し、ファイルの内容を開いて表示するファイルブラウズボックスを提供します.
3.前の問題に基づいて機能を強化する:ユーザーが「OK」ボタンをクリックした時、現在のファイルが修正したかどうかを比較し、修正した場合、「保存を上書きする」、「保存を放棄する」または「名前を付けて保存する」を提示し、相応の機能を実現する.
4.プログラムを書いて、現在のコード量の合計を統計し、10万行のコード量からどのくらい離れているかを示します.要求1:各フォルダを再帰的に検索する要求2:各タイプのソースファイルとソースコードの数を表示する要求3:合計行数とパーセントを表示する
import easygui as g
import random
g.msgbox(' , !')
secret = random.randint(1,10)
msg = " (0~10):"
title = " "
guess = g.integerbox(msg, title, lowerbound = 0, upperbound = 10)
while True:
if guess == secret:
g.msgbox(' !')
break
else:
if guess > secret:
g.msgbox(' , ')
else:
g.msgbox(' , ')
guess = g.integerbox(msg, title, lowerbound = 0, upperbound = 10)
g.msgbox(' , !')
1.ユーザーアカウント情報を登録するためのインタフェースを実現する(*番号付きの必須項目であれば、必ず入力があり、スペースではないことが要求される).
from easygui import *
msg = " "
title = " "
fieldNames = [" *"," *"," "," *"," "]
fieldValues = [] #
fieldValues = multenterbox(msg,title, fieldNames)
# *
while 1:
if fieldValues == None:
break
errmsg = ""
for i in range(len(fieldNames)):
if (fieldValues[i].strip() == "") and (fieldNames[i][-1] == "*"):
errmsg = errmsg + ('"%s" .
' % fieldNames[i])
if errmsg == "":
break
fieldValues = multenterbox(errmsg, title, fieldNames, fieldValues)
print(" :", fieldValues)
2.ユーザーが開くテキストファイルを選択し、ファイルの内容を開いて表示するファイルブラウズボックスを提供します.
import easygui as g
import os
file_path = g.fileopenbox(default = "*.txt")
with open(file_path) as f:
title = os.path.basename(file_path)
msg = " 【%s】 :" %title
text = f.read()
g.textbox(msg, title, text)
3.前の問題に基づいて機能を強化する:ユーザーが「OK」ボタンをクリックした時、現在のファイルが修正したかどうかを比較し、修正した場合、「保存を上書きする」、「保存を放棄する」または「名前を付けて保存する」を提示し、相応の機能を実現する.
import easygui as g
import os
file_path = g.fileopenbox(default = "*.txt")
with open(file_path) as old_file:
title = os.path.basename(file_path)
msg = " 【%s】 :" %title
text = old_file.read()
text_after = g.textbox(msg, title, text)
if text != text_after[:-1]:
#textbox
choice = g.buttonbox(" , :", " ", (" ", " ", " …"))
if choice == " ":
with open(file_path, "w") as old_file:
old_file.write(text_after[:-1])
if choice == " ":
pass
if choice == " …":
another_path = g.filesavebox(default = ".txt")
if os.path.splitext(another_path)[1] != '.txt':
another_path += '.txt'
with open(another_path, "w") as new_file:
new_file.write(text_after[:-1])
4.プログラムを書いて、現在のコード量の合計を統計し、10万行のコード量からどのくらい離れているかを示します.要求1:各フォルダを再帰的に検索する要求2:各タイプのソースファイルとソースコードの数を表示する要求3:合計行数とパーセントを表示する
import easygui as g
import os
def show_result(start_dir):
lines = 0
total = 0
text = ""
for i in source_list:
lines = source_list[i]
total += lines
text += "【%s】 %d , %d
" % (i, file_list[i], lines)
title = ' '
msg1 = ' %d , :%.2f %%
10 %d , !' % (total, total/1000, 100000 - total)
msg2 = ' %d , :%.2f %%
%d , !' % (total, total/1000, total - 100000)
if total <= 100000:
g.textbox(msg1, title, text)
else:
g.textbox(msg2, title, text)
def calc_code(file_name):
lines = 0
with open(file_name) as f:
print(' :%s ...' % file_name)
try:
for each_line in f:
lines += 1
except UnicodeDecodeError:
pass
return lines
def search_file(start_dir):
os.chdir(start_dir)
for each_file in os.listdir(os.curdir):
ext = os.path.splitext(each_file)[1]
if ext in target:
lines = calc_code(each_file)
try:
file_list[ext] += 1
except KeyError:
file_list[ext] = 1
try:
source_list[ext] += lines
except KeyError:
source_list[ext] = lines
if os.path.isdir(each_file):
search_file(each_file)
os.chdir(os.pardir)
target = ['.c', '.cpp', '.py', '.cc', '.java','.pas', '.asm']
file_list = {}
source_list = {}
g.msgbox(" ......", " ")
path = g.diropenbox(" :")
search_file(path)
show_result(path)