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

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

新規登録して質問してみよう
ただいま回答率
87.20%
Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Tkinter

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

受付中

Tkinterのタブの中に、クラスで生成したウィジェットを入れる方法を教えてください。

minomushia
minomushia

総合スコア2

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Tkinter

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

1回答

0評価

0クリップ

271閲覧

投稿2022/03/19 11:45

こんにちは。質問させていただきます。

(①)PythonTkinterのウィンドウのNotebookタブ1の中に、(②)のウィジェットを入れ込みたいです。
Notebookタブの中にウィジェットを入れる方法、と言ったほうがわかりやすいのでしょうか。

どなたか書き方を教えていただけませんでしょうか。

よろしくお願いいたします。

Python
①tkinterコード

# tkinterのインポート` import tkinter as tk import tkinter.ttk as ttk # rootメインウィンドウの設定 root = tk.Tk() root.geometry("800x800") root.title("Notebook Widget") # Notebookウィジェットの作成。 notebook = ttk.Notebook(root) # タブの作成 tab_one = tk.Frame(notebook, bg='white') tab_two = tk.Frame(notebook, bg='blue') # notebookにタブを追加 notebook.add(tab_one, text="tab1", underline=0) notebook.add(tab_two, text="tab2") # tab_oneに配置するウィジェットの作成 label = ttk.Label(tab_one, text="ここにclassを入れたい", background='white') # ウィジェットの配置 notebook.pack(expand=True, fill='both', padx=10, pady=10) label.pack() root.mainloop()

Python
②CSV Viewer

# -*- coding: utf-8 -*- """ @author: data-anal-ojisan """ import os import csv import numpy as np import tkinter as tk from tkinter import ttk from tkinter import filedialog from tkinter import messagebox class CsvViewer: def __init__(self): self.root = None # ルートウィンドウ self.data = None # 読み込まれたcsvファイルの内容 self.tree = None # csvファイルの内容を表示するttk.Treeviewテーブル def start(self): self.call_root_window() self.call_csv_reader_widget() self.call_treeview_widget() self.root.mainloop() def call_root_window(self): """ ルートウィンドウを呼び出す """ self.root = tk.Tk() self.root.geometry('500x500') self.root.title('CsvViewer') def call_csv_reader_widget(self): """ csvファイルを読み込むためのウィジェットを呼び出す関数 """ # widget配置のフレームを作成 frame = tk.Frame(self.root, relief="ridge", bd=1) frame.pack(fill=tk.BOTH, padx=5, pady=5) # ラベルを作成 tk.Label(frame, text='ファイル名 >>').pack(side=tk.LEFT) # CSVファイルのファイルパスを指定する入力フィールドを作成 entry_field = tk.Entry(frame) entry_field.pack(side=tk.LEFT, expand=True, fill=tk.BOTH) # ファイルダイアログを呼び出すボタンを作成 tk.Button(frame, text='ファイル選択', command=lambda: self.set_path(entry_field)).pack(side=tk.LEFT) # CSVファイルを読み込み,Treeviewに内容を表示するボタンを作成 tk.Button(frame, text='ファイル読み込み', command=lambda: self.read_csv(entry_field.get(), # entry_fieldに入力されているファイルパス )).pack(side=tk.LEFT) def call_treeview_widget(self): """ ttk.Treeviewを呼び出し,X軸Y軸のスクロールバーを追加する関数 """ # widget配置のフレームを作成 frame = tk.Frame(self.root) frame.pack(fill=tk.BOTH, expand=True, padx=5, pady=5) frame.columnconfigure(0, weight=1) frame.rowconfigure(0, weight=1) # CSVファイルの内容を表示するTreeviewを作成 self.tree = ttk.Treeview(frame) self.tree.column('#0', width=50, stretch=tk.NO, anchor=tk.E) self.tree.grid(row=0, column=0, sticky=tk.W + tk.E + tk.N + tk.S) # X軸スクロールバーを追加する hscrollbar = ttk.Scrollbar(frame, orient=tk.HORIZONTAL, command=self.tree.xview) self.tree.configure(xscrollcommand=lambda f, l: hscrollbar.set(f, l)) hscrollbar.grid(row=1, column=0, sticky=tk.W + tk.E + tk.N + tk.S) # Y軸スクロールバーを追加する vscrollbar = ttk.Scrollbar(frame, orient=tk.VERTICAL, command=self.tree.yview) self.tree.configure(yscrollcommand=vscrollbar.set) vscrollbar.grid(row=0, column=1, sticky=tk.W + tk.E + tk.N + tk.S) def set_path(self, entry_field): """ tk.Entryの内容をクリアした後にファイルダイアログを呼び出し 選択したファイルパスを,tk.Entryに記入する関数。 :param entry_field: tk.Entry """ # tk.Entryに記入されている内容をクリアする entry_field.delete(0, tk.END) # 実行ファイルの絶対パスを取得する abs_path = os.path.abspath(os.path.dirname(__file__)) # 初期ディレクトリを実行ファイルの絶対パスにしたファイルダイアログを呼び出す file_path = filedialog.askopenfilename(initialdir=abs_path) # ファイルダイアログの選択結果をtk.Entryの内容に挿入する entry_field.insert(tk.END, str(file_path)) def read_csv(self, path): """ ファイルパスの拡張子がcsvの場合に内容を読み込み,ttk.Treeviewに内容を表示する。 拡張子がcsv以外の場合はメッセージボックスを表示する。 :param path: tk.Entryに入力されている文字列 """ # ファイルパスから拡張子を取得する extension = os.path.splitext(path)[1] # 拡張子がcsvの場合 if extension == '.csv': # csvファイルの内容を読み込む with open(path) as f: reader = csv.reader(f) self.data = [row for row in reader] self.show_csv() # 拡張子がcsv以外の場合 else: messagebox.showwarning('エラー', 'CSVを選択してください.') def show_csv(self): """ 読み込んだcsvファイルの内容をttk.Treeviewに表示する。 """ # Treeviewの内容をクリアする self.tree.delete(*self.tree.get_children()) # 列番号をTreeviewに追加する self.tree['column'] = np.arange(np.array(self.data).shape[1]).tolist() # 列のヘッダーを更新する for i in self.tree['column']: self.tree.column(i, width=100, anchor=tk.E) self.tree.heading(i, text=str(i)) # 行番号及びCSVの内容を表示する for i, row in enumerate(self.data, 0): self.tree.insert('', 'end', text=i, values=row) if __name__ == '__main__': viewer = CsvViewer() viewer.start()

良い質問の評価を上げる

以下のような質問は評価を上げましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

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

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

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

teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

  • プログラミングに関係のない質問
  • やってほしいことだけを記載した丸投げの質問
  • 問題・課題が含まれていない質問
  • 意図的に内容が抹消された質問
  • 過去に投稿した質問と同じ内容の質問
  • 広告と受け取られるような投稿

評価を下げると、トップページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

まだ回答がついていません

会員登録して回答してみよう

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

ただいまの回答率
87.20%

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

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

質問する

関連した質問

同じタグがついた質問を見る

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Tkinter

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