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

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

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

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

Python

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

Q&A

1回答

5933閲覧

TkInter:Treeviewを利用した入力可能な表形式は 作ることができない?

saya24

総合スコア227

Tkinter

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

Python

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

0グッド

0クリップ

投稿2021/12/21 05:21

編集2021/12/21 05:34

標題のとおりですが、データベースに1レコード単位に登録するためのユーザインタフェース(画面)を作ろうとしています。
ある種のマスターの登録画面です。

登録しようとしている項目数(列数)が半端じゃないので、ウィンドウ幅に入りきれなくなることが想定されています。
そこで....
①水平のスライドバーを用意する
②水平のスライドバーを用いるということは TREEVIEWのウィドジェットを用いる必要がある
③TREEVIEWのウィジェットの中に ENTRYのウィジェットを横に展開・配置する
という解釈を致しました。(間違っているかも知れません)

早速この目的にそった構築方法・技術の知見を インターネットから入手しようとしたのですが どうにもこうにも関連した記事をみつけることができませんでした。
似たような記事としては こちらを見つけましたが.....
入力用途のENTRYウィジェットは FRAMEウィジェットの直貼りで TREEVIEWのウィジェットに収まっていない。
つまり
データ照会時のみ TREEVIEWのウィジェットで データが表現され、入力時はTREEVIEWに頼らない手法でデータを登録する 方法の紹介かな という印象を持ちました。

質問

・TREEVIEWのウィジェットを データ入力可能な表形式として導入することはできないのですか?(ENTRYウィジェットの入れ子)
・横のスライドバーをLISTBOXやTEEVIEWのウィジェットと関係なく、フレーム(ウィンドウ)へ配置させることはできますでしょうか?
・項目が多く ウィンドウの右側にも Entryのウィジェットを多く配置するには どういう解決策があるのでしょうか?

ご見解よろしくお願い致します。参考になる記事の紹介でも うれしいです!

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

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

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

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

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

guest

回答1

0

TREEVIEWのウィジェットを データ入力可能な表形式として導入することはできないのですか?(ENTRYウィジェットの入れ子)

ttk.Treeview ウィジェットは入力形式に対応してません。

表計算ソフトの様な見栄えの編集機能を実装したい場合は、
該当セルに、入力欄(Enter) を重ねるように配置する方法が取ります。

  • 該当セルの位置・幅を問い合わせる
  • Entry ウィジェットをセルに重ねて配置

 (place もしくは、Toplevelでタイトルバーのないツールウィンドウを作る)

  • Entry からフォーカスが外れた時に、Treeview側にデータ変更を反映。

参考:
https://stackoverflow.com/questions/61975670/how-to-move-popup-window-when-scrolling-a-tkinter-treeview

不完全な実装のようなので、そのままは使えませんが、
placeメソッドで編集したいセルにEntryを配置する実装例。

編集欄の初期値が空だったり、スクロールに対応していなかったり、
実用するには他にも雑多な調整は必要になってきます。

Treeview をスプレッドシート的な使い方をする場合は、
他にも足りない機能は独自に実装する事になるので、外部ライブラリになりますが、
最初からテーブルとしての機能をサポートしたものを選定した方が良いかもしれません。
候補としては、tkintertable, pandastable

投稿2021/12/21 10:30

teamikl

総合スコア8664

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

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

saya24

2021/12/21 10:55

御見解ありがとうございます。 かなり自信はありませんが、ご紹介のライブラリでキーワード検索をかけ、自分でも導入できそうか否か確認してみます。 やはり、スクロールバーというウィジェットは フレームやウィンドウに直接導入するものではないのですね
teamikl

2021/12/21 11:24

スクロールバーに関しては回答で言及しませんでしたが、 外付けで付けることができます。サンプルコードはたくさんあるはず。 独自にスクロールバー付きTreeview を実装したい場合は、垂直バーの例ですが 標準ライブラリの ScrolledText のソースコードが参考になります。 https://docs.python.org/ja/dev/library/tkinter.scrolledtext.html ==== セルの編集機能に関しては、もう少し掘り下げると tkinter のライブラリ元となる tcl/tk では、mixin という 既存クラスを後から拡張するプラグインのような仕組みで、 非標準のライブラリとして使えるように整備されてます。 https://wiki.tcl-lang.org/page/Inplace+edit+in+ttk%3A%3Atreeview tcl のコードを読み込んで tkinter から使う方法は一応あるのですが、 依存ライブラリが必要だったり tcl/tk の実行環境から整えないといけなさそうなので、 残念ながら tkinter(Python側)での利用は難しそうでした。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

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

アカウントをお持ちの方は

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

ただいまの回答率
85.46%

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

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

質問する

関連した質問