Are you sure you want to delete the question?

Leaving a resolved question undeleted may help others!

youtubeのコメントを取得するGUIの作成

解決したいこと

pythonでyoutubeのコメントを取得し表示するGUIを作成しています。
取得したコメントを表示する際にエラーが発生しました。
解決方法を教えてください。

発生している問題・エラー

_tkinter.TclError: bad window path name ".!toplevel.!frame.!labelframe.!frame.!label"

該当するソースコード

import PySimpleGUI as sg
import pytchat
import time

#video id
ID=""
#pytchatのオブジェクト取得
livechat = pytchat.create(video_id=ID)

#テーマ
sg.theme("LightBlue")

#GUI
frame = sg.Frame("Comment",
    [
        [sg.T("コメント欄", key="Comment")]

    ]
)

layout = [
    [frame]
]

window = sg.Window("test", layout=layout)

while livechat.is_alive():
    event, values = window.read()
    chatdata = livechat.get()
    for c in chatdata.items:
        comment = c.message
        print(comment)
        window.extend_layout(window["Comment"], [[sg.T(comment)]])
    time.sleep(5)

自分で試したこと

プログラムを実行するとwhile文の一回目のprint(comment)までは実行できることを確認しました。

0 likes

1Answer

すぐに試せないのですが、↓こう変えてみたらどうでしょうか?

#GUI
frame = sg.Frame("Comment",
    [
        [sg.T("コメント欄")]
    ],
    key="Comment"
)
0Like

Comments

  1. 回答ありがとうございます。
    試してみたところ同様のエラーメッセージが表示されました。

  2. while内の先頭のevent, values = window.read()によって、下記の小さなウィンドウが出現しました。
    しかし、このウィンドウを閉じなければ、先に進みません。
    この後、何をしたかったのでしょうか?

    win1.png

  3. もしかして、こういうことでしょうか?
    layoutwhile以降を変更しています)

    import PySimpleGUI as sg
    import pytchat
    import time
    
    #video id
    ID="WZ_YQ9iom3M"
    #pytchatのオブジェクト取得
    livechat = pytchat.create(video_id=ID)
    
    #テーマ
    sg.theme("LightBlue")
    
    #GUI
    frame = sg.Frame("Comment",
        [
            [sg.T("コメント欄", key="Comment")]
        ]
    )
    
    layout = [
        [frame],
        [sg.Button('決定'), sg.Button('終了')]
    ]
    
    window = sg.Window("test", layout=layout)
    
    while livechat.is_alive():
        event, values = window.read()
        if event in (sg.WIN_CLOSED, '終了'):
            break
        chatdata = livechat.get()
        comment = ""
        for c in chatdata.items:
            comment += c.message + "\n"
            #print(comment)
        
        window["Comment"].update(comment)
    
    windows.close()
    
  4. 不明瞭な質問を投稿してしまい申し訳ありませんでした。行いたかったことは、
    youtubeからコメントを取得→GUIのコメント欄の下にテキスト形式でコメントを自動で表示
    というものでした。
    while文一行目の

    event, values = window.read()
    

    というのはイベントが行われない限り下のif文以降は実行されない認識であってますか?

    またlayoutにボタンを追加しwhile文にwindow.refresh()を入れることでボタンを押した後、自動でコメントを表示することができました。

    不明瞭な質問に丁寧に対応してくださりありがとうございます。

    import PySimpleGUI as sg
    import pytchat
    import time
    
    #video id
    ID="ccIvZ52FZbE"
    #pytchatのオブジェクト取得
    livechat = pytchat.create(video_id=ID)
    
    #テーマ
    sg.theme("LightBlue")
    
    #GUI
    frame = sg.Frame("Comment",
        [
            [sg.T("コメント欄", key="Comment")]
        ]
    )
    
    layout = [
        [frame],
        [sg.B("start")]
    ]
    
    window = sg.Window("test", layout=layout)
    
    while livechat.is_alive():
        event, values = window.read()
        chatdata = livechat.get()
        for c in chatdata.items:
            comment = c.message
            print(comment)
            window.extend_layout(window["Comment"], [[sg.T(comment)]])
            window.refresh()
            time.sleep(1)
    
    window.close()
    
  5. 実現できてよかったです。

    上の新しいコードですが、ウィンドウが縦方向に伸びる一方のため、PCモニターのサイズを超えてしまう可能性があります。既表示分をクリアする機能があったらいいですね。

    解決であれば、当Q&Aをクローズしてください。

Your answer might help someone💌