metaDX
@metaDX

Are you sure you want to delete the question?

Leaving a resolved question undeleted may help others!

[python]PySimpleGUIを使っていたところ初歩的なエラーにつまずいてしまったので知恵をお借りしたいです

解決したいこと

現在pythonでyt-dlpとPySimpleGuiを使い、youtubeから動画をダウンロードするプログラムを作っているのですが、恐らく初歩的であろうエラーでつまずいてしましました。
初心者ですので少なからず読みずらいプログラムで申し訳ございませんが何卒解決策を教えていただけると幸いです。

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

TypeError: cannot unpack non-iterable Input object

該当するソースコード

from yt_dlp import YoutubeDL
import PySimpleGUI as sg

#ダウンロード先のパス
music_path = "C:/Users/user/Music/音楽"
material_path = "C:/Users/user/Videos/素材"
other_path = "C:/Users/user/Videos/その他動画"
path = ""
mp_any = ""

sg.theme('DarkBlue')

#ラジオボタンでファイル形式や使用用途によってダウンロード先を変える
layout = [
    [sg.Text('URL:',sg.InputText('',key="url"))],
    [sg.Radio('mp4',group_id='mp',key='mp4')],
    [sg.Radio('mp3',group_id='mp',key='mp3')],
    [sg.Radio('音楽',group_id='genre',key='music')],
    [sg.Radio('素材',group_id='genre',key='material')],
    [sg.Radio("その他",group_id="genre",key="other")],
    [sg.Button('決定',key="submit")]
]

window=sg.Window("動画ダウンローダー",layout,size=(500,500))

while True:
  #ここでTypeErrorが発生
  event,values = window.read()
  if event ==  sg.WIN_CLOSED:
      break
  elif event == "submit":
    url = values["url"]
    mp4 = values["mp4"]
    mp3 = values["mp3"]
    music = values["music"]
    material = values["material"]
    other = values['other']

  # mp3かmp4どちらにするか
  if mp3 == True:
     mp_any = "bestaudio"
  elif mp4 == True:
     mp_any = "best"

  #ダウンロード先のパスの選択
  if music == True:
     path = music_path
  elif material == True:
      path = material_path
  elif other == True:
     path = other_path

  option = {
     'outtmpl': path+'/%{title}s.%{ext}s',
     'format':mp_any
  }
  ydl=YoutubeDL(option)
  result = ydl.download(url)

window.close()

自分で試したこと

似たような問題が起きた人や引っ掛かりそうなワードで片っ端から調べてみましたが収穫はありませんでした。
是非皆さんの知恵をお借りしたいです。

0

1Answer

レイアウトを定義している箇所の括弧の対応がおかしいですね。

2Like

Comments

  1. woxtuさんの指摘の通りlayoutがおかしいようです。

    - [sg.Text('URL:',sg.InputText('',key="url"))],
    + [sg.Text('URL:'),sg.InputText('',key="url")],
    
  2. @metaDX

    Questioner

    ご指摘の箇所を修正したところ正常に作動しました!
    次からは同じようなミスをしないよう気を付けたいと思います
    お二方ともありがとうございました!

Your answer might help someone💌