🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
canvas

HTML5の<canvas>要素用のタグです。CanvasはHTML5から導入された、二次元の図形描写が可能な要素です。

Tkinter

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

button

HTMLで用いる<button>タグです。

Python

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

Q&A

解決済

1回答

720閲覧

ボタンを繰り返し使うとcommandが反応しない

t.k.k

総合スコア1

canvas

HTML5の<canvas>要素用のタグです。CanvasはHTML5から導入された、二次元の図形描写が可能な要素です。

Tkinter

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

button

HTMLで用いる<button>タグです。

Python

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

0グッド

0クリップ

投稿2021/03/25 13:48

編集2021/03/25 14:01

前提・実現したいこと

一つ目のボタンを押したら画面が変わり(消して新しいのを書いた)その画面でまたボタンを押すとまた新しい画面にかきかえ、そこの画面でテキストボックスに入力した文字を取りたい。エラーは出てません。

発生している問題・エラーメッセージ

引用テキスト

エラーメッセージ

python

1import tkinter 2from PIL import Image, ImageTk 3from time import sleep 4import random 5import tkinter as tk 6import tkinter.font as f 7import tkinter.ttk as ttk 8import sys 9 10 11# windowを描画 12window = tkinter.Tk() 13# windowサイズを変更 14window.geometry("1200x800") 15 16# windowタイトルを設定 17window.title("トランプ(スピード)") 18 19 20# 画像を表示するためのキャンバスの作成(黒で表示) 21canvas = tkinter.Canvas(bg = "white", width=1200, height=800) 22canvas.place(x=0, y=0) # 左上の座標を指定 23 24 25def settei_1(): 26 global en 27 print("123") 28 val_en=en.get()#enを値を取得し、val_enに代入 29 print(val_en) 30 31 32def settei(): 33 global en 34 start_1.place_forget() 35 start_button_2.place_forget() 36 start_button_3.place_forget() 37 start_button_4.place_forget() 38 39 settei_1 = tk.Label(window, text="プレイヤー名", font=("MSゴシック", "15", "bold"), background='white')#テスト用 40 settei_1.place(x=200,y=100) 41 en=tk.Entry(text="player.1") 42 bt=tk.Button(text="ボタン",command = settei_1) 43 44 en.place(x=400,y=70)#テキストボックス配置 45 en.focus_set()#テキストボックスにフォーカスを当てる 46 bt.place(x=400,y=400) 47 48 49start_1 = tk.Label(window, text="ゲーム", font=("MSゴシック", "30", "bold"), background='white')#テスト用 50start_1.place(x=400,y=300) 51start_button_2 = tk.Button(window, text='始める', font=("MSゴシック", "25", "bold"), foreground='red', background='white',command = window.destroy) 52start_button_2.place(x=490, y=450) 53start_button_3 = tk.Button(window, text='設定', font=("MSゴシック", "15", "bold"), background='white',command = settei) 54start_button_3.place(x=470, y=550) 55start_button_4 = tk.Button(window, text='終わる', font=("MSゴシック", "15", "bold"), foreground='blue', background='white',command = window.destroy) 56start_button_4.place(x=570, y=550) 57 58 59 60 61window.mainloop() 62 63

該当のソースコード

import tkinter
from PIL import Image, ImageTk
from time import sleep
import random
import tkinter as tk
import tkinter.font as f
import tkinter.ttk as ttk
コード

コード

import sys

windowを描画

window = tkinter.Tk()

windowサイズを変更

window.geometry("1200x800")

windowタイトルを設定

window.title("ゲーム")

画像を表示するためのキャンバスの作成(黒で表示)

canvas = tkinter.Canvas(bg = "white", width=1200, height=800)
canvas.place(x=0, y=0) # 左上の座標を指定

def settei_1():
global en
print("123")
val_en=en.get()#enを値を取得し、val_enに代入
print(val_en)

def settei():
global en
start_1.place_forget()
start_button_2.place_forget()
start_button_3.place_forget()
start_button_4.place_forget()

settei_1 = tk.Label(window, text="プレイヤー名", font=("MSゴシック", "15", "bold"), background='white') settei_1.place(x=200,y=100) en=tk.Entry(text="player.1") bt=tk.Button(text="ボタン",command = settei_1) en.place(x=400,y=70)#テキストボックス配置 en.focus_set()#テキストボックスにフォーカスを当てる bt.place(x=400,y=400)

start_1 = tk.Label(window, text="ゲーム", font=("MSゴシック", "30", "bold"), background='white')
start_1.place(x=400,y=300)
start_button_2 = tk.Button(window, text='始める', font=("MSゴシック", "25", "bold"), foreground='red', background='white',command = window.destroy)
start_button_2.place(x=490, y=450)
start_button_3 = tk.Button(window, text='設定', font=("MSゴシック", "15", "bold"), background='white',command = settei)
start_button_3.place(x=470, y=550)
start_button_4 = tk.Button(window, text='終わる', font=("MSゴシック", "15", "bold"), foreground='blue', background='white',command = window.destroy)
start_button_4.place(x=570, y=550)

window.mainloop()

python

試したこと

global などを入れてみて試しましたが動きません。

補足情報(FW/ツールのバージョンなど)

python 3.8.5 64-bit
v2021.1.502429796

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

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

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

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

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

y_waiwai

2021/03/25 13:51

このままではコードが読めないので、質問を編集し、<code>ボタンを押し、出てくる’’’の枠の中にコードを貼り付けてください
t.k.k

2021/03/25 13:58

わかりました
guest

回答1

0

ベストアンサー

同じ関数内で command にしているのは、関数ではなく Label になってます。

解決策: 変数名を被らないように変更する。

python

1 2# 関数定義はグローバル 3 4def settei_1(): 5 ... 6 7def settei(): 8 9 # ローカル変数 settei_1 はラベル 10 settei_1 = tk.Label(...) 11 12 # ここでの command = settei_1 は直前のラベルを参照 13 bt=tk.Button(window, text="ボタン", command = settei_1)

tkinter 内部では全て文字列として扱われてる為、エラーは報告されません。


global などを入れてみて試しましたが動きません。

お勧めはしませんが、明示的にグローバルの settei_1 を参照するには、
globals() で得られる辞書から参照できます。

python

1 2 bt=tk.Button(window, text="ボタン", command = globals()["settei_1"]) 3

投稿2021/03/25 15:47

teamikl

総合スコア8717

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

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

t.k.k

2021/03/25 16:12

解決しました!! 小さなミスに気付けるように今後気を付けます!! ありがとうございました!!!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問