質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

89.05%

tkinterを使ってのGUI化をしたい

解決済

回答 1

投稿

  • 評価
  • クリップ 0
  • VIEW 420

前提・実現したいこと

GUIの実装
ある本で人口無能をGUI化しようとしたのですがうまくいきません。
初心者でどう直していいかわからないので教えてください。

発生している問題・エラーメッセージ

TclError: couldn't open "img1.gif": no such file or directory

該当のソースコード

import tkinter as tk
from ptna import *

entry = None
response_area = None
lb = None
action = None
ptna = Ptna('ptna')

def putlog(str):
    lb.insert(tk.END, str)

def prompt():
    p = ptna.name
    if (action.get())==0:
        p += ':' + ptna.responder.name
    return p + '> '


def talk():
    value = entry.get()
    if not value:
        response_area.configure(text='なに?')
    else:
        response = ptna.dialogue(value)
        response_area.configure(text=response)
        putlog('> ' + value)
        putlog(prompt() + response)
        entry.delete(0, tk.END)


def run():
    global entry, response_area, lb, action

    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
    )

    canvas = tk.Canvas(
        root,
        width = 500,
        height = 300,
        relief=tk.RIDGE,
        bd=2
    )
    canvas.place(x=370, y=0)

    img = tk.PhotoImage(file = 'img1.gif')
    canvas.create_image(
        0,
        0,
        image = img,
        anchor = tk.NW
    )

    response_area = tk.Label(
        root,
        width=50,
        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
    )
    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
        )
    sb1 = tk.Scrollbar(
        root,
        orient = tk.VERTICAL,
        command = lb.yview
        )
    sb2 = tk.Scrollbar(
            root,
            orient = tk.HORIZONTAL,
            command = lb.xview
          )
    lb.configure(yscrollcommand = sb1.set)
    lb.configure(xscrollcommand = sb2.set)
    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()


if __name__ == '__main__':
    run()

試したこと

ネットでの解決法の検索
画像をgifとして保存する

補足情報(FW/ツールのバージョンなど)

Phython3.7

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 1

checkベストアンサー

0

img1.gif が無いという例外です。
このファイルをカレントディレクトリに置いてください。
カレントディレクトリがどこになるかは、スクリプト中で os.getcwd() を呼び出すと確かめることができます。

ファイルとディレクトリ¶

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2019/10/15 00:07

    ありがとうございます。なんとかなりそうです!!

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 89.05%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る