0
0

ファイル形式を変換するデスクトップアプリ

Posted at

ファイル形式を変換するデスクトップアプリ

はじめに

備忘録です。数年前に作ったコードで、とても汚いので戒め的な意味もあります。

ソースコード

henkan_meijin.py

import os
import wx
import time
import ffmpy
import ffmpeg
j1 = os.path.dirname(os.path.abspath(__file__))

class FileDropTarget(wx.FileDropTarget):
    def __init__(self, window):
        wx.FileDropTarget.__init__(self)
        self.window = window #ファイルをドロップする対象

    def OnDropFiles(self, x, y, filenames):
        for file in filenames:
            self.window.box.SetValue(file)
            dnd = self.window.box.SetValue(file)

class FileDropTarget2(wx.FileDropTarget):
    def __init__(self, window):
        wx.FileDropTarget.__init__(self)
        self.window = window #ファイルをドロップする対象

    def OnDropFiles(self, x, y, filenames):
        for file2 in filenames:
            self.window.box2.SetValue(file2)
            dnd2 = self.window.box2.SetValue(file2)

class FileDropTarget3(wx.FileDropTarget):
    def __init__(self, window):
        wx.FileDropTarget.__init__(self)
        self.window = window#ファイルをドロップする対象

    def OnDropFiles(self, x, y, filenames):
        for file3 in filenames:
            self.window.box2.SetValue(file3)
            dnd3 = self.window.box2.SetValue(file3)



class MyApp(wx.Frame):

    def __init__(self, *args, **kw):
        super(MyApp, self).__init__(*args, **kw)

        frame = wx.Frame(None, wx.ID_ANY, "ファイル形式変換の達人", size=(400, 550) , style=wx.SYSTEM_MENU | wx.CAPTION | wx.CLOSE_BOX | wx.CLIP_CHILDREN | wx.MINIMIZE_BOX)
        panel_ui = wx.Panel(frame, -1)
        frame.Show(True)



        array = ("選択" , ".mp3", ".wav", ".gif" , ".jpeg" , ".jpg" , ".png" , ".aac", ".aif" , ".flac" , ".tta" , ".tak" , ".ape" , ".wma" , ".bmp" , ".avi" , ".mov" , ".wmv" , ".flv" , ".mpg" , ".mp4")
        # コンボボックスの設置
        #self.combo = wx.ComboBox(panel_ui, -1, u'選択', choices=array , pos=(220,271))
        self.combo = wx.ComboBox(panel_ui, -1, u'選択', choices=array , pos=(220,278) , size=(50,70) , style=wx.CB_READONLY)
        combochoi = self.combo.SetStringSelection('選択')
        combo_text=self.combo.GetValue()




        self.label= wx.StaticText(panel_ui, -1, 'ここにドロップしろ(変換するファイル)', pos=(10, 10))
        #日本語なら、一文字8必要になる

        bobo=wx.StaticText(panel_ui, -1, '______________________________________________________________________', pos=(15, 35))
        bobo2=wx.StaticText(panel_ui, -1, '______________________________________________________________________', pos=(15,210))

        self.bobo3 = wx.StaticText(panel_ui, -1, ' ', pos=(15, 49), size=(350, 170))

        bobo3 = wx.StaticText(panel_ui, -1 , '______________________________________________________' , pos=( 108,386 ))

        self.bobo44 = wx.StaticText(panel_ui, -1 , ' ' , pos=(110,400) , size=(264.9999999999999999999999999999999999999999999999999999999999999999999999,40))
        self.bobo55 = wx.StaticText(panel_ui, -1 , ' ' , pos=(5,435) , size=(390,55))


        btn = wx.Button(panel_ui, -1, '参照', pos=(20, 270) , size=(65,40))
        btn.Bind(wx.EVT_BUTTON, self.clicked)


        self.box = wx.TextCtrl(panel_ui, -1, pos=(6, 235) , size=(370,25))#ここに絶対パスが入る
        sbtext = self.box.GetValue()

        rabelfile = wx.StaticText(panel_ui, -1 , 'ファイルの拡張子' , pos=(116,284.5))
        font2 = wx.Font(9.5, wx.FONTFAMILY_DEFAULT , wx.FONTSTYLE_NORMAL , wx.FONTWEIGHT_NORMAL)
        rabelfile.SetFont(font2)

        rabelyajirusi = wx.StaticText(panel_ui, -1 , '' , pos=(205,282))
        font = wx.Font(11.5, wx.FONTFAMILY_DEFAULT, wx.FONTSTYLE_NORMAL, wx.FONTWEIGHT_NORMAL)
        rabelyajirusi.SetFont(font)



        btn2 = wx.Button(panel_ui, -1, '変換開始', pos=(280,270), size=(90,40))
        btn2.Bind(wx.EVT_BUTTON, self.clicked444)

        self.bobo5 = wx.StaticText(panel_ui, -1, '___________________________________________________________________________',pos=(4,310))
        self.bobo6 = wx.StaticText(panel_ui, -1, '___________________________________________________________________________',pos=(4,485))

        self.bobo4 = wx.StaticText(panel_ui, -1, '出力先のファイル', pos=(15,335))

        self.box2 = wx.TextCtrl(panel_ui, -1, pos=(6,360) , size=(370,25))
        sbtext2=self.box2.GetValue()


        btn3 = wx.Button(panel_ui, -1, '参照', pos=(20,395) , size=(85,36))#出力の参照
        btn3.Bind(wx.EVT_BUTTON, self.clicked333)


        dt = FileDropTarget(self)
        self.bobo3.SetDropTarget(dt)


        dt2 = FileDropTarget2(self)
        self.bobo44.SetDropTarget(dt2)

        dt3 = FileDropTarget3(self)
        self.bobo55.SetDropTarget(dt3)


    def clicked333(self, event):
        folder = wx.DirDialog(self , style=wx.DD_CHANGE_DIR , message="保存先フォルダ")

        if folder.ShowModal() == wx.ID_OK:
            self.folder = folder.GetPath()
            sefo=self.folder#sefoにファイルパスの情報を入れる
        folder.Destroy()
        self.box2.SetValue(sefo)

    def clicked444(self, event):

        sbtext = self.box.GetValue() #ファイルのフルパスが入る
        sbtext2=self.box2.GetValue() #ディレクトリのパスが入る

        combo_text=self.combo.GetValue() #拡張子が入る

        filepath=sbtext
        basename_without_ext = os.path.splitext(os.path.basename(filepath))[0]
        basename=basename_without_ext
        basename2 = os.path.basename(filepath)#ファイル名だけを抽出している。
        #dirname = os.path.dirname(filepath)
        #huhu33=("sdihihhfgisirehqiwjeiphapodjfapjdifhawejfoiahw")
        #huhu22=("あsdkljfaklhiajdklfhadjcnbzkf2-09820911i939381923dkjaeij992849201491194jidijghwuhahalkjaoijaejaidhfakbfouahwe" + huhu33 )
        #dircopy = (dirname + '/' + huhu22 + basename2)

        path22 = (sbtext2 + '/' + basename + combo_text)#出力ファイルのフルパス
        kaku = os.path.exists(path22)


        if os.path.isfile(sbtext):
            print("jk0")
            jk5="tyo3"
        else :
            print("0.2")
            jk5="jojo2"

        if os.path.isdir(sbtext2):
            print("jk1")
            jk4="tyo2"

        else :
            jk4="jojo"
            print("jk2")

        if combo_text=="選択" :
            jk2="jojo"
            print("jk3")
            False

        else :
            print("jk4")
            jk2="tyotyo"


        t98="e"
        if "gu"==t98 :
            print("ok")

        elif jk5=="jojo2":
            print("jk7.3")
            failshuturyoku = wx.MessageDialog(None , u'変換するファイルを選んでください。' , 'エラー' , style=wx.ICON_ERROR | wx.OK)
            failshuturyoku.ShowModal()

        elif jk4=="jojo" :
            print("jk7")
            shuturyokusaki = wx.MessageDialog(None , u'出力先のフォルダを選択してください。' , 'エラー' , style=wx.ICON_ERROR | wx.OK)
            shuturyokusaki.ShowModal()


        elif jk2=="tyotyo" :
            print("jk8")
            True

        elif combo_text=="選択" :
            print("jk9")
            dialog2 = wx.MessageDialog(None, u'変換するファイル形式を選んでください。', u'エラー', style=wx.ICON_ERROR |  wx.OK)
            # メッセージダイアログを表示
            dialog2.ShowModal()


        thi="thi"

        if thi=="tho" :
            True

        elif jk4=="jojo" :
            False

        elif kaku == False and "tyotyo"==jk2:


            time.sleep(2)
            pathall = os.path.dirname(__file__)
            ffmpegdir = pathall + "ffmpeg/bin/ffmpeg.exe"
            stream = ffmpeg.input(sbtext)
            # 出力
            stream = ffmpeg.output(stream, path22)
            # 実行
            ffmpeg.run(stream)




            message2=wx.MessageBox(u'ファイル形式の変換が終わりました。', u'完了', wx.OK)
            message2.ShowModal()
            message2.Destroy()

        elif combo_text=="選択" :
            False
        elif "jojo"==jk4 :
            False
        elif "jojo2"==jk5 :
            False

        else:
            message232 = """
            ファイルが重複してしまうため、
                作業を続行できません。
            重複するファイルを削除すると、
                作業を続行できます。
                         """
            # メッセージダイアログを作成

            dialog = wx.MessageDialog(None, message232, u'エラー', style=wx.ICON_ERROR |  wx.OK)
            # メッセージダイアログを表示
            dialog.ShowModal()




    def clicked(self, event):
        dialog = wx.FileDialog(None, u'ファイルを選択してください')
        # ファイル選択ダイアログを表示

        if dialog.ShowModal() == wx.ID_OK:
            path = dialog.GetPath()  #pathにファイルの情報を入れる
            self.box.SetValue(path)# メンバ変数tcにセット


if __name__ == '__main__':
    app = wx.App(False)
    MyApp(None)

    app.MainLoop()

終わりに

複数のファイルを同時にできるようにしたい。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0