0 AIform File みんなに公開
import tkinter as tk
from kuri import *
"""グローバル変数の定義
"""
entry = None #入力エリアのオブジェクトを保持
response_area = None #応答エリアのオブジェクトを保持
lb = None #ログ表示用リストボックスを保持
action = None #オプションメニューの状態を保持
kuri = Kuri('くりちゃん') #Kuriオブジェクトを保持
def putlog(str):
"""対話ログをリストボックスに追加する関数
@str 入力文字列または応答メッセージ
"""
lb.insert(tk.END,str)
def prompt():
"""クリちゃんのプロンプトを作る関数
"""
k = kuri.name
if (action.get()) == 0:
k+= ':' + kuri.responder.name
return k+ '>'
def talk():
"""対話を行う関数
Kuriクラスのdialogue()メソッドを実行して応答メッセージを取得
入力文字列及び、応答メッセージをログに出力
"""
value = entry.get()
#入力エリアが未入力の場合
if not value:
response_area.configure(text = 'なにクリ?')
#入力されていたら対話オブジェクトを実行
else:
#入力文字列を引数にしてdialogue()メソッドの結果を取得
response = kuri.dialogue(value)
#応答メッセージを表示
response_area.configure(text = response)
#入力文字列引数にしてputlog()を呼ぶ
putlog('>' + value)
#応答メッセージを引数にしてputlog()を呼ぶ
putlog(prompt() + response)
#入力エリアをクリア
entry.delete(0,tk.END)
#---------------------------------------------------------------------------------------------
#画面を描画する関数
#----------------------------------------------------------------------------------------------
def run():
#グローバル変数を使用するための記述
global entry, response_area,lb,action
#メインウインドウを作成
gamen = tk.Tk()
#ウインドウのサイズを設定
gamen.geometry('880x560')
#ウインドウのタイトルを設定
gamen.title('クリちゃんBOT 初期バージョン')
#フォントの用意
font = ('創英角ポップ体', 14)
font_log = ('創英角ポップ体',11)
#メニューバーの作成
menubar = tk.Menu(gamen)
gamen.config(menu = menubar)
#ファイルメニュー
filemenu = tk.Menu(menubar)
menubar.add_cascade(label = '会話',menu = filemenu)
filemenu.add_command(label = '会話を終える', command = gamen.destroy)
#オプションメニュー
action = tk.IntVar()
optionmenu = tk.Menu(menubar)
menubar.add_cascade(label = 'タイプオプション',menu = optionmenu)
optionmenu.add_radiobutton(
label = 'タイプ名を表示する', #アイテム名
variable = action, #選択時の値を格納するオブジェクト
value = 0 #actionの値を0にする
)
optionmenu.add_radiobutton(
label = 'タイプ名を表示しない', #アイテム名
variable = action, #選択時の値を格納するオブジェクト
value = 1 #actionの値を0にする
)
#キャンバスの作成
canvas = tk.Canvas(
gamen, #親要素をメインウインドウに設定
width = 500, #幅を設定
height = 300, #高さを設定
relief = tk.RIDGE, #枠線を表示
bd = 2,
bg = 'aquamarine' #枠線の幅を設定
)
canvas.place(x = 370, y = 0)
img = tk.PhotoImage(file = 'kurichan.gif') #表示するイメージを用意
canvas.create_image( #キャンバス上にイメージを配置
160, #x座標
60,
image = img, #配置するイメージオブジェクトを指定
anchor = tk.NW #配置の起点となる位置を左上隅に指定
)
#応答エリアを作成
response_area = tk.Label(
gamen, #親要素をメインウインドウに設定
width = 50, #幅を設定
height = 10, #高さを設定
bg = 'orange', #背景色を設定
font = font,
fg = 'blue' , #フォントを設定
relief = tk.RIDGE , #枠線の種類を指定
bd = 2 #枠線の幅を設定
)
response_area.place(x = 370, y = 305) #メインウインドウに配置
#フレームの作成
frame = tk.Frame(
gamen, #親要素はウインドウ
relief = tk.RIDGE, #ボーダーの種類
borderwidth = 4 #ボーダー幅を設定
)
#入力ボックスの作成
entry = tk.Entry(
frame, #親要素はフレーム
width = 70, #幅を設定
font = font,
fg = 'green',
bg = 'yellow'
#フォントを設定
)
entry.pack(side = tk.LEFT) #フレームに左詰めで配置する
entry.focus_set() #入力ボックスにフォーカスを当てる
#ボタンの作成
button = tk.Button(
frame, #親要素はフレーム
width = 15, #幅を設定
text = '話す',
bg = 'blue',
fg = 'gold', #ボタンに表示するテキスト
command = talk #クリック時にtalk()関数を呼ぶ
)
button.pack(side = tk.LEFT) #フレームに左詰めで配置する
frame.place(x = 30, y = 520) #フレームを画面上に配置
#リストボックスを作成
lb = tk.Listbox(
gamen, #親要素はメインウインドウ
width = 42, #幅を設定
height = 30, #高さを設定
font = font_log,
bg = 'green',
fg ='pink' #フォントを設定
)
#縦のスクロールバーを生成
sb1 = tk.Scrollbar(
gamen, #親要素はメインウインドウ
orient = tk.VERTICAL, #縦方向のスクロールバーにする
command = lb.yview #スクロール時にListboxのyview()メソッドを呼ぶ
)
#横のスクロールバーを生成
sb2 = tk.Scrollbar(
gamen, #親要素はメインウインドウ
orient = tk.HORIZONTAL, #横方向のスクロールバーにする
command = lb.xview #スクロール時にListboxのxview()メソッドを呼ぶ
)
#リストボックスとスクロールバーを連動させる
lb.configure(yscrollcommand = sb1.set)
lb.configure(xscrollcommand = sb2.set)
#grid()でリストボックス、スクロールバーを画面上に配置
lb.grid(row = 0, column = 0)
sb1.grid(row = 0, column = 1, sticky = tk.NS)
sb2.grid(row = 1, column = 0,sticky = tk.EW)
#メインループ
gamen.mainloop()
#---------------------------------------------------------------------
#プログラムの起点
#---------------------------------------------------------------------
if name == 'main':
run()
コメント(0)