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

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

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

Stringは、ゼロ以上の文字から連続してできた文字の集合を扱うデータ型です。基本的にテキストを表すために使われます。

Tkinter

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

Python

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

Q&A

解決済

1回答

816閲覧

tkinterのListboxの使い方について

goki_gottan

総合スコア168

String

Stringは、ゼロ以上の文字から連続してできた文字の集合を扱うデータ型です。基本的にテキストを表すために使われます。

Tkinter

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

Python

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

0グッド

0クリップ

投稿2019/01/14 13:14

Python3のtkinterについて初歩的な質問をさせていただきます。

ネットでかなり調べたのですが、
tkinerのリストボックスを作成する際、ほとんど、下記構文を使用しております。

z = ('JPA', 'USA')
a = StringVar(value=z)
b = Listbox(root, listvariable=a,height=4)

 ※defは省略させていただきます。

stringvarの使い方を理解していないことは分かっているのですが、
stringvarを使わずに、リストボックスに任意の値をいれる構文はありますでしょうか。
当方、stringvarとdefの使い方がいまいち理解できないようです。

お願いします。

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

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

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

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

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

guest

回答1

0

ベストアンサー

これはtkinterの仕様です。
なのでListboxクラスをインスタンス化させる際のコンストラクタではstringvarを使わなければいけません。
それが嫌ならinsertメソッドを使う、あるいはconfigureを使う方法があります。
configureはできたか忘れました。

なぜコンストラクタでこのようなPythonの組み込み型がつかえない理由

IT特有の抽象化を意識したあまり使い勝手が悪くなっている典型的な例だと私は思っています

日本語のtkinterのリファレンスによると

ウィジェットによっては、(テキスト入力ウィジェットのように) 特殊なオプションを使って、現在設定されている値をアプリケーション内の変数に直接関連付けできます。このようなオプションには variable, textvariable, onvalue, offvalue および value があります。この関連付けは双方向に働きます: 変数の値が何らかの理由で変更されると、関連付けされているウィジェットも更新され、新しい値を反映します。

残念ながら、現在の tkinter の実装では、variable や textvariable オプションでは任意の Python の値をウィジェットに渡せません。この関連付け機能がうまく働くのは、tkinter 内で Variable というクラスからサブクラス化されている変数によるオプションだけです。
Variable には、 StringVar, IntVar, DoubleVar, BooleanVar といった便利なサブクラスがすでにすでに数多く定義されています。こうした変数の現在の値を読み出したければ、 get() メソッドを呼び出します。また、値を変更したければ set() メソッドを呼び出します。このプロトコルに従っている限り、それ以上なにも手を加えなくてもウィジェットは常に現在値に追従します。

らしいです。
また英語のリファレンスListboxの項目によると

listvariable
A StringVar that is connected to the complete list of values in the listbox (see Section 52, “Control variables: the values behind the widgets”.

If you call the .get() method of the listvariable, you will get back a string of the form "('v0', 'v1', ...)", where each vi is the contents of one line of the listbox.

投稿2019/01/14 14:51

編集2019/01/14 15:11
flan

総合スコア146

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問