小甲鱼《零基础学习Python》课后笔记(三十五):グラフィックユーザーインタフェース入門——EasyGui

23549 ワード

手を動かすまず手を練習して、私たちの最初の数字を当てる小さなゲームにインタフェースを加えましょうか?
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)