質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
Tkinter

Tkinterは、GUIツールキットである“Tk”をPythonから利用できるようにした標準ライブラリである。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

1回答

1376閲覧

[Python初心者] Tkinter Classを使用してグループ化したい。

退会済みユーザー

退会済みユーザー

総合スコア0

Tkinter

Tkinterは、GUIツールキットである“Tk”をPythonから利用できるようにした標準ライブラリである。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

1クリップ

投稿2020/09/18 11:07

編集2020/09/19 09:03

イメージ説明

オレンジ、赤、青、緑、ピンクで分かれている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()

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

teamikl

2020/09/18 18:35

>掲載するコードは、他の人がコピーペーストして動く最低限のものの掲載をお願いします。 ローカルのファイル参照等は、環境が変わるとそのまま実行できないので、 コードを実行する為には、質問とは関係ない部分のデバッグが必要になってしまいます。 まずは質問用に、問題の状況を再現出来る短いコードを作成して見て下さい。 >オレンジ、赤、青、緑、ピンクで分かれているFrameをClassを使って書きたい。 FirstFrame ~等、「class を使って書く」と「グループ化」は、既に満たされてますよね。 >赤のFrame内で処理したInput PathをオレンジのFrame内にある黄色(Canvas)と白(MediaInfo)に継承したいです。 「Frame内で処理した」と「~に継承したい」がよくわかりません。 Input Path に選択/入力した値を、黄色と白のフレームから参照したいという事でしょうか? 字面通り Input Path を黄・白のフレームに継承すると、 黄色と白の枠に Input Path が表示されることになるので、恐らく意図する挙動ではないと思います。 継承は、ウィジェットを再利用して機能を追加したい場合に用いられます。
退会済みユーザー

退会済みユーザー

2020/09/19 09:06

ローカルファイルの記載してある部分を削除いたしました。 Input Path に選択/入力した値を、黄色と白のフレームから参照したいです。 黄色枠では動画を再生させたいのでcanvasではないのかと思っていますが、白枠ではファイルのパスを記載したいと思っておりました。
teamikl

2020/09/20 13:33

ffprobe_path, ffmpeg_path も実際のファイルを要求するので不要です。 上記のコードを動かすには、変数が使われてる箇所を探して排除するか、 コードを読み解いて、適切な位置にファイルを配置しなければなりません。 > Input Path に選択/入力した値を、黄色と白のフレームから参照したいです。 継承により何を解決したいかの部分が解らなかったのですが、 以前の質問も拝見して、やりたいことの状況は解りました。 今回の場合、「継承」は適切ではありません。 > 白枠ではファイルのパスを記載したいと思っておりました。 上記で言った「黄色と白の枠に Input Path が表示されることになる」 は、クラスを継承した場合「白枠にも入力欄自体が表示」されることになります。入力した値ではありません。 恐らく「クラスの継承」の理解に対して齟齬があるようなので、 「~継承したいです」という質問の仕方では、 やりたいことの意図は伝わらないと思います。
guest

回答1

0

ベストアンサー

FrameをClassを使って書きたい

まずは、一つずつ進めるのが良いと思います。

https://docs.python.org/ja/3.5/library/tkinter.html#a-simple-hello-world-program
基本的な構成は上記が参考になりますし、クラスを利用した実装例は多くありますので、一つずつ実装してみてはいかがでしょうか。
それでわからない点がでた時点で、問題のあるコードを提示して質問すると良いかと。

投稿2020/09/18 12:25

t_obara

総合スコア5488

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問