人工知能
import tkinter as tk
from ptna import *
from ptna import *
def putlog(str):
"""対話ログをリストボックスに追加する関数
@str 入力文字列または応答メッセージ
"""
lb.insert(tk.END, str)
"""対話ログをリストボックスに追加する関数
@str 入力文字列または応答メッセージ
"""
lb.insert(tk.END, str)
def prompt():
"""ピティナのプロンプトを作る関数
"""
p=ptna.name
if(action.get())==0:
p += ":" + ptna.responder.name
return p + "> "
"""ピティナのプロンプトを作る関数
"""
p=ptna.name
if(action.get())==0:
p += ":" + ptna.responder.name
return p + "> "
def talk():
"""対話を行う関数
・Ptnaクラスのdialogue()を実行して応答メッセージを取得
・入力文字列および応答メッセージをログに出力
"""
value = entry.get()
#入力エリアが未入力の場合
if not value:
response_area.configure(text="なに?")
#入力されていたら対話オブジェクトを実行
else:
#入力文字列を引数にしてdialogue()の結果を取得
response = ptna.dialogue(value)
#応答メッセージを表示
response_area.configure(text=response)
#入力文字列引数にしてputlog()を呼ぶ
potlog("> " + value)
#応答メッセージを引数にしてputlog()を呼ぶ
putlog(prompt() + response)
#入力エリアをクリア
entry.delete(0, tk.END)
"""対話を行う関数
・Ptnaクラスのdialogue()を実行して応答メッセージを取得
・入力文字列および応答メッセージをログに出力
"""
value = entry.get()
#入力エリアが未入力の場合
if not value:
response_area.configure(text="なに?")
#入力されていたら対話オブジェクトを実行
else:
#入力文字列を引数にしてdialogue()の結果を取得
response = ptna.dialogue(value)
#応答メッセージを表示
response_area.configure(text=response)
#入力文字列引数にしてputlog()を呼ぶ
potlog("> " + value)
#応答メッセージを引数にしてputlog()を呼ぶ
putlog(prompt() + response)
#入力エリアをクリア
entry.delete(0, tk.END)
#==============================================================================
# 画面を描写する関数
#==============================================================================
# 画面を描写する関数
#==============================================================================
#メインウィンドウを作成
root = tk.Tk()
#ウィンドウのサイズを設定
root.geometry("880x560")
#ウィンドウのタイトルを設定
root.title("Intelligent Agent : ")
#フォントの用意
font = ("Helevetica", 14)
font_log = ("Helevetica", 11)
root = tk.Tk()
#ウィンドウのサイズを設定
root.geometry("880x560")
#ウィンドウのタイトルを設定
root.title("Intelligent Agent : ")
#フォントの用意
font = ("Helevetica", 14)
font_log = ("Helevetica", 11)
#メニューバーの作成
menubar = tk.Menu(root)
root.config(menu = menubar)
#「ファイル」メニュー
filemenu = tk.Menu(menubar)
menubar.add_cascade(label = "ファイル", menu = filemenu)
filemenu.add_command(label = "閉じる", command = root.destroy)
#「オプション」メニュー
action = tk.IntVar()
optionmenu = tk.Menu(menubar)
menubar.add_cascade(label = "オプション", menu = optionmenu)
optionmenu.add_radiobutton(
label = "Responderを表示",
variable = action,
value = 0
)
optionmenu.add_radiobutton(
label = "Responderを表示しない",
variable = action,
value = 1
)
menubar = tk.Menu(root)
root.config(menu = menubar)
#「ファイル」メニュー
filemenu = tk.Menu(menubar)
menubar.add_cascade(label = "ファイル", menu = filemenu)
filemenu.add_command(label = "閉じる", command = root.destroy)
#「オプション」メニュー
action = tk.IntVar()
optionmenu = tk.Menu(menubar)
menubar.add_cascade(label = "オプション", menu = optionmenu)
optionmenu.add_radiobutton(
label = "Responderを表示",
variable = action,
value = 0
)
optionmenu.add_radiobutton(
label = "Responderを表示しない",
variable = action,
value = 1
)
#キャンパスの作成
canvas = tk.Canvas(
root,
width = 500,
height = 300,
relief = tk.RIDGE,
bd = 2
)
canvas.place(x=370, y=0)
canvas = tk.Canvas(
root,
width = 500,
height = 300,
relief = tk.RIDGE,
bd = 2
)
canvas.place(x=370, y=0)
#応答エリアを作成
response_area = tk.Label(
root,
width = 500,
height = 10,
bg = "yellow",
font = font,
relief = tk.RIDGE,
bd = 2
)
response_area.place(x=370, y=305)
response_area = tk.Label(
root,
width = 500,
height = 10,
bg = "yellow",
font = font,
relief = tk.RIDGE,
bd = 2
)
response_area.place(x=370, y=305)
#フレームの作成
frame = tk.Frame(
root,
relief = tk.RIDGE,
borderwidth = 4
)
frame = tk.Frame(
root,
relief = tk.RIDGE,
borderwidth = 4
)
#入力ボックスの作成
entry = tk.Entry(
frame,
width = 70,
font = font
)
entry.pack(side = tk.LEFT)
entry.focus_set()
#ボタンの作成
button = tk.Button(
frame,
width = 15,
text = "話す",
command = talk
)
button.pack(side = tk.LEFT)
frame.place(x=30, y=520)
entry = tk.Entry(
frame,
width = 70,
font = font
)
entry.pack(side = tk.LEFT)
entry.focus_set()
#ボタンの作成
button = tk.Button(
frame,
width = 15,
text = "話す",
command = talk
)
button.pack(side = tk.LEFT)
frame.place(x=30, y=520)
#リストボックスを作成
lb = tk.Listbox(
root,
width = 42,
height = 30,
font = font_log
)
lb = tk.Listbox(
root,
width = 42,
height = 30,
font = font_log
)
#縦のスクロールバーを作成
sb1 = tk.Scrollbar(
root,
orient = tk.VERTICAL,
command = lb.yview
)
#横のスクロールバーを作成
sb2 = tk.Scrollbar(
root,
orient = tk.VERTICAL,
command = lb.xview
)
sb1 = tk.Scrollbar(
root,
orient = tk.VERTICAL,
command = lb.yview
)
#横のスクロールバーを作成
sb2 = tk.Scrollbar(
root,
orient = tk.VERTICAL,
command = lb.xview
)
#リストボックスとスクロールバーを連動させる
lb.configure(yscrollcommand = sb1.set)
lb.configure(xscrollcommand = sb2.set)
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)
lb.grid(row = 0, column = 0)
sb1.grid(row = 0, column = 1, sticky = tk.NS)
sb2.grid(row = 1, column = 0, sticky = tk.EW)
#メインループ
root.mainloop()
root.mainloop()
#==============================================================================
# プログラムの起点
#==============================================================================
if _name_ == "_main_":
run()
# プログラムの起点
#==============================================================================
if _name_ == "_main_":
run()
- 実行結果 -
Traceback (most recent call last):
File "ptnaForm.py", line 179, in <module>
if _name_ == "_main_":
NameError: name '_name_' is not defined
File "ptnaForm.py", line 179, in <module>
if _name_ == "_main_":
NameError: name '_name_' is not defined
写経を続けたものの '_name_' が定義されていないので、エラーで返って来ているのは理解できるが、問題はどのように定義したらいいのかという事。エラーの改善法を頑張って見つけたいと思います。