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

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

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

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

Q&A

解決済

1回答

2601閲覧

tkinter Listboxで選択したアイテム情報を関数の外で利用する方法について

gorio

総合スコア17

Python 3.x

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

0グッド

0クリップ

投稿2019/03/12 10:38

編集2019/03/12 10:46

Listboxを使い選択した情報(indexとindex2)を関数(selected)の外で使いたいのですがどうしても出来ません。
どのようにすれば良いか教えて頂けないでしょうか。

import tkinter as tk
from tkinter import StringVar

index = ''

root = tk.Tk()
root.geometry("+{}+{}".format(200, 200))
frame = tk.Frame(root, width=300, height=300, bg="white")
frame.pack(padx=10, pady=10)

var = StringVar(value=["ABC", "CDE", "EFG"])
listbox = tk.Listbox(frame,listvariable=var,height=4)
listbox.pack()

def selected(event):
if len(listbox.curselection()) == 0:
return
index = listbox.curselection()[0]
index2 =(listbox.get(index))
print(index2)

root.bind("<<ListboxSelect>>", selected)

print(index) # ここで使いたいのですが..

root.mainloop()

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

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

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

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

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

hayataka2049

2019/03/12 11:01 編集

そのままコードを貼るとインデントが消えたりと不都合があるので、 ```python コード ``` のようにマークダウンで囲うようにしてください。
t_obara

2019/03/13 01:53

「ここで使いたい」とお考えになる理由はなんでしょうか?
gorio

2019/03/14 01:26

- コードは、マークダウンで囲うようにします。ご指摘ありがとうございました。 -「ここで使いたい」ですが、今回の関数では、returnで変数を戻せないのでどうすればいいのか分からず質問いたしました。
guest

回答1

0

ベストアンサー

global宣言でもつければ、スコープだけはグローバルにできますけど・・・

まず前提として、そのprintの位置にあるコードが実行された時点ではリストボックスは絶対に選択されていません。root.mainloop()が実行されることでウィンドウが出ますので。

この手のGUIアプリケーションは、普通はボタンが押されたりといった「イベント」と、そのときの動作を記述した「コールバック」を紐付けるという形で実装していきます。なので、そもそも考え方が間違っています。

投稿2019/03/12 11:05

hayataka2049

総合スコア30933

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

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

gorio

2019/03/14 01:28

ありがとうございました。回答頂いた内容で解決しました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問