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

メモを他の人に見せる

このメモを見せたい人に、このURL(今開いているページのURLです)を教えてあげてください

コメント(0)

  • someone

  • someone