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

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

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

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

Tkinter

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

Python

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

Q&A

解決済

1回答

1829閲覧

2回目のボタン押下時に1回目の結果を削除したい

HASHIMO10

総合スコア8

Python 3.x

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

Tkinter

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

Python

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

0グッド

0クリップ

投稿2018/01/05 06:10

###前提・実現したいこと
「名簿」と「お題」という二つのcsvを読み込み、
そこから3つの氏名とお題をそれぞれ重複なしでランダムに抽出し、
「Aが語るx」
「Bが語るy」
「Cが語るz」
というメッセージを表示させたいです。
メッセージはウィンドウでボタンをクリックした際に表示し、
2回目にボタンを押下した際はまた新しい「名簿」と「お題」で更新されるようにしたいです。

###発生している問題・エラーメッセージ
上記の目的は実現できたのですが2回目にボタンを押下した際に、
前回の文字列を削除してから新しい文字列を表示させることがどうしてもできません。
初歩的な質問で恐縮ですがお知恵を貸していただければと思います。
*そのほか、ソースコード上で変な箇所があればあわせてご指摘ください。

###該当のソースコード

import csv, random import tkinter as tk #ウインドウを作る root = tk.Tk() root.geometry("") root.title("何が出るかな python3.6.4版") root.configure(width = 1000, height = 600, bg="white") def ButtonClick(): with open('meibo.csv') as meibo: lstMeibo = list(csv.reader(meibo)) with open('neta.csv') as neta: lstNeta = list(csv.reader(neta)) kai = 3 #回答者の数を任意で指定 rand_p = random.sample(lstMeibo, kai) rand_n = random.sample(lstNeta, kai) for i in range(kai): player = rand_p[i] neta = rand_n[i] label = tk.Label(root, text = str(player[0]) + " が語る " + str(neta[0]), font=("游ゴシック Medium", 30), bg="white") label.place(x = 20, y = 100+i*100) button1 = tk.Button(root, text = "サイコロを振る", font=("游ゴシック Medium", 15), command=ButtonClick) button1.place(x = 20, y = 20) root.mainloop()

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

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

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

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

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

guest

回答1

0

ベストアンサー

サイコロを振る(ボタンを押す)毎に Label を生成・配置を繰り返すのではなく、予め3つの Label を生成しておき、サイコロを振る毎にLabelのテキスト部のみを更新するようにすると良いかと思います。
(テキスト部が更新されるので、前回の結果を削除する必要はありません)

Python

1import csv, random 2import tkinter as tk 3 4#ウインドウを作る 5root = tk.Tk() 6root.geometry("") 7root.title("何が出るかな python3.6.4版") 8root.configure(width = 1000, height = 600, bg="white") 9 10def ButtonClick(label_texts): 11 with open('meibo.csv') as meibo: 12 lstMeibo = list(csv.reader(meibo)) 13 14 with open('neta.csv') as neta: 15 lstNeta = list(csv.reader(neta)) 16 17 rand_p = random.sample(lstMeibo, kai) 18 rand_n = random.sample(lstNeta, kai) 19 20 for i,label in enumerate(label_texts): 21 player = rand_p[i][0] 22 neta = rand_n[i][0] 23 label.set("{} が語る {}".format(player, neta)) 24 25kai = 3 #回答者の数を任意で指定 26texts = [] 27for i in range(kai): 28 text = tk.StringVar() 29 tk.Label(root, textvariable = text, font=("游ゴシック Medium", 30), bg="white").place(x = 20, y = 100+i*100) 30 texts.append(text) 31button1 = tk.Button(root, text = "サイコロを振る", font=("游ゴシック Medium", 15), command=lambda: ButtonClick(texts)) 32button1.place(x = 20, y = 20) 33 34root.mainloop()

投稿2018/01/05 06:45

magichan

総合スコア15898

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

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

HASHIMO10

2018/01/06 14:01

大変助かりました!enumerate関数ですか。 早速使ってみたところ、問題なく動作しました! 初心者のためいただいたコードがまだ100%理解できていませんがじっくり見ていきたいと思います。 とりいそぎお礼のみにて。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.49%

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

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

質問する

関連した質問