オレンジ、赤、青、緑、ピンクで分かれているFrameをClassを使って書きたい。
そして、赤のFrame内で処理した**Input Path**をオレンジのFrame内にある黄色(Canvas)と白(MediaInfo)に継承したいです。
Python
1import tkinter as tk 2from tkinter import filedialog 3import os 4import sys 5import subprocess 6 7win = tk.Tk() 8win.title("IVT Transcode app") 9 10win.geometry("700x700") #Turn on for locked Resolution 11win.configure(background='#52514F') # DARK MODE! | ダークモード! 12 13 14 15# ----Dictionaries & Variables | 辞書と変数---- 16output_format = ['.MP4', '.AVI', '.MOV', '.MXF'] 17ffmpeg_path = open(os.path.join(sys.path[0], "ffmpeg/ffmpeg"), "r") 18ffprobe_path = open(os.path.join(sys.path[0], "ffmpeg/ffprobe"), "r") 19 20## Input Settings ## 21class FirstFrame: 22 def __init__(self,master): 23 FrameOne = tk.LabelFrame(master, text="Input Settings", fg="white", bg="red", padx="5", pady="5") 24 FrameOne.grid(column=2, row=2, padx='20', pady='5', sticky='nsew') 25 26 self.file_dialog_input = None 27 self.Text_Input_Path = tk.Label(FrameOne, text="Input Path ", 28 fg="white", bg="#52514F", font=('Helvetica', 10)) 29 self.Text_Input_Path.grid(column=0, row=0, sticky='w') 30 self.Field_Input_Path = tk.Entry(FrameOne, fg="black", highlightbackground="#52514F") 31 self.Field_Input_Path.grid(column=1, row=0, sticky='nsew') 32 self.Button_Input_Path = tk.Button(FrameOne, text="Open File", command=self.file_dialog_input_path, highlightbackground="#52514F", font=('Helvetica', 10)) 33 self.Button_Input_Path.grid(column=2, row=0, sticky='e') 34 35 def file_dialog_input_path(self): 36 self.file_dialog_input = tk.filedialog.askopenfilename(initialdir = "/",title = "Select file",filetypes=[('MOV file (*.mov)', '*mov'), ('AVI file (*.avi)', '*.avi'),('MP4 file (*.mp4)', '*.mp4')]) 37 self.Field_Input_Path.insert(tk.END, self.file_dialog_input) 38 print (self.file_dialog_input) 39 40 41## Output Settings ## 42class SecondFrame: 43 def __init__(self,master): 44 FrameTwo = tk.LabelFrame(master, text="Output Settings", fg="white", bg="blue", padx="5", pady="5") 45 FrameTwo.grid(column=2, row=3, padx='20', pady='5', sticky='nsew') 46 47 self.file_dialog_output = None 48 self.Text_Output_Path = tk.Label(FrameTwo, text="Output Path", fg="white", bg="#52514F", font=('Helvetica', 10)) 49 self.Text_Output_Path.grid(column=0, row=0, sticky='w') 50 self.Text_Output_Name = tk.Label(FrameTwo, text="Output Filename", fg="white", bg="#52514F", font=('Helvetica', 10)) 51 self.Text_Output_Name.grid(column=0, row=1, sticky='w') 52 self.Field_Output_Path = tk.Entry(FrameTwo, fg="black", highlightbackground="#52514F") 53 self.Field_Output_Path.grid(column=1, row=0, sticky='nsew') 54 self.Field_Output_Name = tk.Entry(FrameTwo, fg="black", highlightbackground="#52514F") 55 self.Field_Output_Name.grid(column=1, row=1, sticky='nsew') 56 self.Button_Output_Path = tk.Button(FrameTwo, text="Select Path", command=self.file_dialog_output_path, highlightbackground="#52514F", pady='2', font=('Helvetica', 10)) 57 self.Button_Output_Path.grid(column=2, row=0, sticky='nsew') 58 59 #Extention Option | 拡張子選択 60 self.Extension_Value = tk.StringVar() 61 self.Extension_Value.set(".MOV") # default value as MOV | デフォルトMOV 62 self.Extension_Option = tk.OptionMenu(FrameTwo, self.Extension_Value, *output_format) 63 self.Extension_Option.config(bg='#52514F', font=('Helvetica', 10), pady='2') 64 self.Extension_Option.grid(column=2, row=1, sticky='nsew') 65 66 67 68 def file_dialog_output_path(self): 69 self.file_dialog_output = tk.filedialog.askdirectory(initialdir = "/",title = "Select path") 70 self.Field_Output_Path.insert(tk.END, self.file_dialog_output) 71 print (self.file_dialog_output) 72 #TextOutputText = tk.Text(FifthFrame, height=8, width=45, bg="grey", highlightbackground='grey') 73 #TextOutputText.delete('1.0', tk.END) 74 #TextOutputText.insert(tk.END, self.file_dialog_output) 75 76## Buttoun Settings## 77class ThirdFrame: 78 def __init__(self,master): 79 FrameThree = tk.LabelFrame(master, text="Button", fg="white", bg="green", pady="5", padx="5") 80 FrameThree.grid(column=3, row=2, rowspan=2, padx='20', pady='5', sticky='nsew') 81 82 #Analyze 83 self.file_dialog_input = None 84 self.ButtonOne = tk.Button(FrameThree,text="Analyze (MediaInfo)", highlightbackground="#52514F", padx=3, pady=3,) 85 self.ButtonOne.grid(column=2, row=0, sticky='nw', pady=1, padx=1) 86 #Preview 87 ButtonTwo = tk.Button(FrameThree, text="Preview", highlightbackground="#52514F", padx=3, pady=3) 88 ButtonTwo.grid(column=2, row=1, sticky='nw', pady=1, padx=1) 89 #Simple Transcode 90 Button_ffm_simple = tk.Button(FrameThree, text="Simple Transcode", highlightbackground="#52514F", padx=3, pady=3) 91 Button_ffm_simple.grid(column=2, row=2, sticky='nw', pady=1, padx=1) 92 93 94## Progress Settings ## 95class ForthFrame: 96 def __init__(self,master): 97 FrameFour = tk.LabelFrame(master, text="Progress", fg="white", bg="pink", padx="5", pady="5") 98 FrameFour.grid(column=2, columnspan=2, row=4, padx='20', pady='5', sticky='nsew') 99 100 #Progress | 進捗ウィンドウの設定 101 TextOutputText = tk.Text(FrameFour, height=3, width=90, bg="grey", highlightbackground='grey') 102 TextOutputText.grid(column=1, columnspan=2, row=1, sticky='nsew', pady=5, padx=5) 103 ClearButton = tk.Button(FrameFour, text="Clear", highlightbackground="#52514F", padx=1, pady=1) 104 ClearButton.grid(column=2, row=2, sticky='e', pady=1, padx=1) 105 106##Preview Window Settings ## 107class FifthFrame: 108 def __init__(self,master): 109 FrameFive = tk.LabelFrame(master, text="Preview", fg="white", bg="orange", padx="5", pady="5") 110 FrameFive.grid(column=2, columnspan=2, row=1, padx='20', pady='5', sticky='nsew') 111 112 Preview_Start = tk.Button(FrameFive, text="start", fg="black", bg="#52514F", font=('Helvetica', 10)) 113 Preview_Start.grid(column=1, row=4, sticky='nsew', pady=5, padx=5) 114 Preview_ad1f = tk.Button(FrameFive, text=" < ", fg="black", bg="#52514F", font=('Helvetica', 10)) 115 Preview_ad1f.grid(column=0, row=4, sticky='e', pady=5, padx=5) 116 Preview_bc1f = tk.Button(FrameFive, text=" > ", fg="black", bg="#52514F", font=('Helvetica', 10)) 117 Preview_bc1f.grid(column=2, row=4, sticky='w', pady=5, padx=5) 118 119 120 #Cavas Area | キャンバスエリア 121 canvas = tk.Canvas(FrameFive, width = 320, height = 240)#Canvasの作成 122 canvas.create_rectangle(0, 0, 320, 240, fill = 'yellow')#塗りつぶし 123 canvas.place(x=0, y=0)#Canvasの配置 124 125 canvas.grid(column=0, columnspan=3, row=0, rowspan=4, pady=5, padx=5) 126 127 #Media Infomation | メディア情報 128 MediaInfoOut = tk.Text(FrameFive, height=20, width=40, bg="white", highlightbackground='grey') 129 MediaInfoOut.grid(column=3, row=1, rowspan=5, sticky='nsew', pady=5, padx=10) 130 131 132 133 134 135f1 = FirstFrame(win) 136f2 = SecondFrame(win) 137f3 = ThirdFrame(win) 138f4 = ForthFrame(win) 139f5 = FifthFrame(win) 140 141 142#Start the GUI | GUI開始 143win.mainloop()
>掲載するコードは、他の人がコピーペーストして動く最低限のものの掲載をお願いします。
ローカルのファイル参照等は、環境が変わるとそのまま実行できないので、
コードを実行する為には、質問とは関係ない部分のデバッグが必要になってしまいます。
まずは質問用に、問題の状況を再現出来る短いコードを作成して見て下さい。
>オレンジ、赤、青、緑、ピンクで分かれているFrameをClassを使って書きたい。
FirstFrame ~等、「class を使って書く」と「グループ化」は、既に満たされてますよね。
>赤のFrame内で処理したInput PathをオレンジのFrame内にある黄色(Canvas)と白(MediaInfo)に継承したいです。
「Frame内で処理した」と「~に継承したい」がよくわかりません。
Input Path に選択/入力した値を、黄色と白のフレームから参照したいという事でしょうか?
字面通り Input Path を黄・白のフレームに継承すると、
黄色と白の枠に Input Path が表示されることになるので、恐らく意図する挙動ではないと思います。
継承は、ウィジェットを再利用して機能を追加したい場合に用いられます。
ローカルファイルの記載してある部分を削除いたしました。
Input Path に選択/入力した値を、黄色と白のフレームから参照したいです。
黄色枠では動画を再生させたいのでcanvasではないのかと思っていますが、白枠ではファイルのパスを記載したいと思っておりました。
ffprobe_path, ffmpeg_path も実際のファイルを要求するので不要です。
上記のコードを動かすには、変数が使われてる箇所を探して排除するか、
コードを読み解いて、適切な位置にファイルを配置しなければなりません。
> Input Path に選択/入力した値を、黄色と白のフレームから参照したいです。
継承により何を解決したいかの部分が解らなかったのですが、
以前の質問も拝見して、やりたいことの状況は解りました。
今回の場合、「継承」は適切ではありません。
> 白枠ではファイルのパスを記載したいと思っておりました。
上記で言った「黄色と白の枠に Input Path が表示されることになる」
は、クラスを継承した場合「白枠にも入力欄自体が表示」されることになります。入力した値ではありません。
恐らく「クラスの継承」の理解に対して齟齬があるようなので、
「~継承したいです」という質問の仕方では、
やりたいことの意図は伝わらないと思います。
回答1件
あなたの回答
tips
プレビュー