Python
Tkinter

Python3でファイルを選択するダイアログボックス(初心者向け)


実行した環境

Ubuntu Stdio 17.10

Python 3.6.3

@kekehoさんのPythonでMP3音源を再生する

https://qiita.com/kekeho/items/a0b93695d8a8ac6f1028

にmp3ファイルを選択するダイアログボックスを組み合わせようとしましたが、検索してヒットするのはPython2用が多いです。

実行するとimportでエラーになります。

検索していると、tkMessageBox、tkFileDialogがpython3では統合されているようです。


参考

Cassiopeiaの日記 さん

[Python]Tkinter(tkFileDialog) を使ってファイルを開くダイアログを使ってみる。

http://d.hatena.ne.jp/Cassiopeia/20070819/1187479725

tkMessageBox

https://stackoverflow.com/questions/19074055/installing-tkmessagebox-on-python2-7

tkFileDialog

https://stackoverflow.com/questions/28590669/tkinter-tkfiledialog-doesnt-exist


file_dialog.py

#!/usr/bin/python3

# -*- coding: utf-8 -*-

#import Tkinter #python2
import tkinter #python3
#import tkMessageBox #python2
from tkinter import messagebox as tkMessageBox #python3
#import tkFileDialog #python2
from tkinter import filedialog as tkFileDialog #python3

#root=Tkinter.Tk() #python2
root=tkinter.Tk() #python3
root.withdraw()

fTyp=[('テキストファイル','*.txt')]
#複数のタイプを指定することも可能。

iDir='/home/ユーザ名/' #iDir='c:/' #Windows

#askopenfilename 一つのファイルを選択する。
filename=tkFileDialog.askopenfilename(filetypes=fTyp,initialdir=iDir)

tkMessageBox.showinfo('FILE NAME is ...',filename)

#askopenfilenames 複数ファイルを選択する。
filenames=filedialog.askopenfilenames(filetypes=fTyp,initialdir=iDir)

for f in filenames:
tkMessageBox.showinfo('FILE NAME is ...',f)

#askdirectory ディレクトリを選択する。
dirname=tkFileDialog.askdirectory(initialdir=iDir)

tkMessageBox.showinfo('SELECTED DIRECROTY is ...',dirname)


image.png


超簡易MP3 簡易プレーヤー

上記の「PythonでMP3音源を再生する」を参考に作成しました。

使用方法

起動して、ファイルをした後、必ずキャンセル ボタンをクリックします。

再生後は終了します。

ショートカットを作成し起動しています。

Terminalは起動するように、trueにします。

https://qiita.com/ty21ky/items/7ea5d88e44714fe9f672

#!/usr/bin/python3

# coding: UTF-8

from mutagen.mp3 import MP3 as mp3
import pygame
import time
import tkinter
from tkinter import messagebox as tkMessageBox
from tkinter import filedialog as tkFileDialog

def pathname(fullpath): #フルパスからパスを取り出す
n = fullpath.rfind('/') + 1
return fullpath[:n]

def play(filenames): #MP3を再生
#n = len(file) - 1
for file in filenames:
print(" {}\n".format(file)) #曲名表示
pygame.mixer.init()
pygame.mixer.music.load(file)
mp3_length = mp3(file).info.length
pygame.mixer.music.play(1)
time.sleep(mp3_length + 1.25)
pygame.mixer.music.stop()

def select(): #ファイル選択
root=tkinter.Tk()
root.withdraw()
fTyp = [('MP3ファイル','*.mp3')]
iDir = '~/Music/' #デフォルトのフォルダはHomeDir
filename = []
while True:
list_no = len(filename)
filename.insert(list_no, tkFileDialog.askopenfilename(filetypes=fTyp,initialdir=iDir,title = "簡易MP3 Player (ファイル選択を終了する時はキャンセルをクリック)"))
iDir = pathname(filename[list_no]) #選択するフォルダを1つ前に選択したフォルダに変更
if filename[list_no] == '':
break
i = len(filename) - 1
del filename[i] #ファイル選択の時に、最後にnullが入っているので削除する
print(" 再生する曲名\n")
for kyoku in filename:
print(" {}\n".format(kyoku))
print("再生中------------------------------------------\n")

return filename

print("\n MP3 簡易プレーヤー\n")
play(select()) #MP3を再生

image.png

mp3-2.png