Python 1年間のまとめ method編 ③

前稿でwidget(部品)をウインドー(フォーム)上に張り付ける方法を纏めました。

今回はそれらにデータを呼び込んだり、乱数による表示をしたりするcodeの書き方を纏めておきます。

 

***************************************************

③ 押されたキーの名前を表示する

このやり方は、例えば4択問題の回答に正しい番号を選んだかどうかの判定などに使えそうですね。

 

#押されたキー名を表示.py 11/7/2019

from tkinter import *
import tkinter as tk

root = tk.Tk()
root.title(‘Q & A’)
root.geometry(‘200×150+500+500’)
#root.option_add(‘*font’, (‘FixedSys’, 18))

buffer = StringVar() #この関数が絶対必要
#buffer.set(”)

# キーの表示
def print_key(event):
    key = event.keysym
    buffer.set(‘選ばれた数字は %s’ % key + ‘です。’)

# ラベルの設定
lbl1=tk.Label(root, text = ‘正しい数字を選んで下さい。’)
lbl1.pack(pady=15)

lbl2 = tk.Label(root, textvariable = buffer, bg=”pink”) #この辺はこう書くもんだと覚える!
lbl2.pack()

lbl2.bind(‘<Any-KeyPress>’, print_key) #選択した文字を表示させる関数(def print_key)へ飛ぶ
lbl2.focus_set()

root.mainloop()

 

runして数字4を選んだ瞬間に、下記のように表示されました(ピンク色の文字列)。
上手く動作してますね。

 

 

 

 

 

 

おまけ: 

Q:上のcodeをコピペして動作させるとerrorとなります。 何が悪いのでしょう?

A:root.title(‘Q & A’)の’が全角になります、他の’も同様です。
  ’200×150+500+500’のxが全角になっています。
  

このeditorは半角の’()xなどが、何故か全角に変わります。 また字下げ(tab)は効きません。

注意深くなって良いかもしれませんね。

——————————————————

 

② テキストファイルをウインドーに表示する(英単語アプリで作る)

前回は簡単にスクリプトで表示しましたが、今回はしっかりとフォームに表示できるようにします。

簡単にやるべきことを書きます。

・テキストファイルを作成する
・ウインドーにラベル、テキストボックス、コマンドボタンを作る
・テキストファイルをリストに読み込む
・リストから乱数に従い、英単語と意味を分ける
・またその乱数値に従い、英単語を意味を配列に入れる
・コマンドボタンをクリックしたら、英単語と意味をテキストボックスに表示する
・終了ボタンででアプリを終了する

以下がそのcodeです。

#乱数でテキスト表示1.py 完成 11/5/2019

import tkinter as tk
import random

root = tk.Tk()
root.geometry(‘300×250+150+70’)
root.title(‘難解英単語’)


# Label
lbl1 = tk.Label(text=’英単語:’)
lbl1.place(x=10, y=30)
lbl2 = tk.Label(text=’意味:’)
lbl2.place(x=10, y=80)

# Text(Entry)
txt1 = tk.Entry(width=30)
txt1.place(x=60, y=30)
txt2 = tk.Entry(width=30)
txt2.place(x=60, y=80)

#Command Button1
btn1=tk.Button(root, text=’開始/次へ’)
btn1.place(x=50, y=200)

def read_words():
    file = open(‘文字列読込1.txt’,’r’, encoding=’utf_8′)
    lines = file.readlines()
    file.close()

    eitango_words = [] # 上の句list
    imi_words = [] # 下の句list

    line_count = 0 #句数カウンター
    for line in lines:
        name = line.rsplit(“\t”)
        if len(name) == 2: # 要素2個をそれぞれのlistへ追加する
            eitango_words.append(name[0]) # 英単語をlistへadd
            imi_words.append(name[1]) # 意味をlistへadd
            line_count += 1
        return line_count,[eitango_words, imi_words] # txtがなくなるまで繰り返す

def show_data(count,num, eitango_words, imi_words): # 乱数に応じた要素を表示する関数
    eitango_word = eitango_words[num] # 英単語をeitango_wordに格納
    imi_word = imi_words[num]

#ボタン1(開始/次)の処理関数
def tango_Show(event):
    num = random.randrange(0, count)
    #print(f’num={num}’) #変数numの表示
    eitango_word = eitango_words[num] # 英単語eitango_wordに格納
    imi_word = imi_words[num]

    txt1.delete(0, tk.END)
    txt2.delete(0, tk.END)

    txt1.insert(0, f’ {eitango_word}’) #txt1.insert(tk.END, eitango_word)でもOK
    txt2.insert(0, f’ {imi_word}’)

    btn1.bind(“<Button>”, tango_Show)

count, words = read_words()
eitango_words = words[0]
imi_words = words[1]

num = random.randrange(0, count)
show_data(count, num, eitango_words, imi_words)

def destroy():
    global root
    root.destroy()

#ボタン2(終わる)の処理関数
btn2=tk.Button(root, text=’終わる’, command=destroy)
btn2.place(x=180, y=200)

root.mainloop()

 

これをrunすると、下記のようなアプリウインドーが出来ます。

これで覚えたいことをテキストファイルにすれば、ゲーム感覚で覚えられます。

 

 

 

 

 

 

 

 

 

————————————————–

① textファイルを読み込んで、表示する

読み込んだファイルをリスト形式でcodeに読み込む

 

#文字列読込1.py 11/2/2019

file = open(
    ‘文字列読込1.txt’, # 同一holder内のtextを読み込む
    ‘r’, # 読み取りモード
    encoding = ‘utf_8’ # テキストファイルのエンコーディング方式を指定
    )
data = file.read() # ファイル終端までのすべてのデータを取得
file.close() # Fileオブジェクトをクローズ
print(data)

これをrunすると次のように表示される。 文字列読込1.txtの中身が表示されました。

“””
crucial 極めて重要な
subsequent その後の
devise 考案する
strain 負担、重圧
distinct 明確な、独特な
incorporate 取り入れる
eliminate なくす、排除する
privilege 特権、特典
retain 記憶する、維持する
seize つかむ、つかみ取る
perceive 知覚する
variation 変化、変動
persuade 説得する、促す
prominent 著名な、顕著な
integrate 一体化する、組み入れる
anticipate 予想する、予期する
disturb 邪魔する、不安にさせる
respectively それぞれ、おのおの
perspective 展望、観点
magnificent 壮麗な、壮大な

“””

 

次回はこのtextをコマンドボタンで、ウインドーに表示させます。


 

 

続く

Python小学館
ウイジェット ラベルの徹底的検証 ③

傘寿で始めたPython ですが毎日少しずつ進歩しております(その積り)。 でも覚えるより忘れる方が …

Python小学館
Python別館 目次

・Pythonで作成したアプリ関連の記事は「Python別館」に、・widgetやその使用方法・それ …

Python小学館
乱数関数の使い方 ⑨

普段使う部品の基本的な設定は大体理解してきたので、つぎによく出てくる乱数の使い方を完全にしておきたい …