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

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

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

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

Q&A

解決済

1回答

570閲覧

Python3 でテキスト入力Boxを開き、入力された文字を取得したい(Tkinterで試しましたがうまくいきません)

iyazyaz

総合スコア15

Python 3.x

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

0グッド

0クリップ

投稿2018/08/29 03:58

目的は、パスワードを入力してもらい、予め定めたパスワード(例えば 13579)と一致したらIF構文で次のプロセスへ進み、間違っていたらelseで終了にしたいのです。
(Python3 でテキスト入力Boxを開き、入力された文字を取得したい)

Tkinterのサンプルがありましたので試してみました。

以下を走らせると、Username  Email  Password のBoXが開くのですが

①それぞれ入力された文字列はどのようにすれば取得できるのでしょうか?
②ダミーで何か入力して OKを押しても 次に進めません(Process finished with exit code 0 になりません)

まずは それぞれ入力数値を  print(???)で表示する方法と OKを押してboxが消えて次のプロセスに進めるのか教えていただけますと助かります。

もしも、他のライブラリーで目的を
簡単にできるものがあれば教えてください。

よろしくお願いします。

from tkinter import * from tkinter import ttk if __name__ == '__main__': root = Tk () root.title ( 'Entry Test' ) root.resizable ( False, False ) frame1 = ttk.Frame ( root, padding=10 ) frame1.grid () label1 = ttk.Label ( frame1, text='Username', padding=(5, 2) ) label1.grid ( row=0, column=0, sticky=E ) label2 = ttk.Label ( frame1, text='Email', padding=(5, 2) ) label2.grid ( row=1, column=0, sticky=E ) label3 = ttk.Label ( frame1, text='Password', padding=(5, 2) ) label3.grid ( row=2, column=0, sticky=E ) # Username Entry username = StringVar () username_entry = ttk.Entry ( frame1, textvariable=username, width=30 ) username_entry.grid ( row=0, column=1 ) # Email Entry email = StringVar () email_entry = ttk.Entry ( frame1, textvariable=email, width=30 ) email_entry.grid ( row=1, column=1 ) # Password Entry password = StringVar () password_entry = ttk.Entry ( frame1, textvariable=password, width=30, show='*' ) password_entry.grid ( row=2, column=1 ) frame2 = ttk.Frame ( frame1, padding=(0, 5) ) frame2.grid ( row=3, column=1, sticky=W ) button1 = ttk.Button ( frame2, text='OK' ) button1.pack ( side=LEFT ) button2 = ttk.Button ( frame2, text='Cancel', command=quit ) button2.pack ( side=LEFT ) root.mainloop () print(password)

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

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

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

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

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

guest

回答1

0

ベストアンサー

Q1, それぞれ入力された文字列はどのようにすれば取得できるのでしょうか?

A1, username.get()で取得できます。表示したいなら、print(username.get())としてくださいな。

参考:ウィジェット変数を関連付ける

Q2, ダミーで何か入力して OKを押しても 次に進めません

button2 = ttk.Button ( frame2, text='Cancel', command=quit )

と同じように引数のcommandを設定すればよいかと。

Python

1button1 = ttk.Button ( frame2, text='OK', command=quit )

予め定めたパスワード(例えば 13579)と一致したらIF構文で次のプロセスへ進み、間違っていたらelseで終了にしたいのです。

次のプロセスという部分がよく分かりませんでしたが。
やりたいことと回答を反映したサンプルコードです、ご参考まで。

Python

1# -*- coding: utf-8 -*- 2from tkinter import * 3from tkinter import ttk 4 5root = Tk() 6root.title('Entry Test') 7# Tk()を呼び出し後に使用可能、クリックイベントから参照するために、この位置で宣言 8username = StringVar() 9email = StringVar() 10password = StringVar() 11 12 13# OKボタンをクリック時のイベント 14def ok_click(): 15 if not (password.get() == "13579"): 16 # 画面を終了=root.mainloop()の次の行から実行再開 17 root.quit() 18 return 19 # 一致したなら 20 print("Done") 21 22 23def main(): 24 root.resizable ( False, False ) 25 frame1 = ttk.Frame ( root, padding=10 ) 26 frame1.grid () 27 28 label1 = ttk.Label ( frame1, text='Username', padding=(5, 2) ) 29 label1.grid ( row=0, column=0, sticky=E ) 30 31 label2 = ttk.Label ( frame1, text='Email', padding=(5, 2) ) 32 label2.grid ( row=1, column=0, sticky=E ) 33 34 label3 = ttk.Label ( frame1, text='Password', padding=(5, 2) ) 35 label3.grid ( row=2, column=0, sticky=E ) 36 37 # Username Entry 38 username_entry = ttk.Entry ( 39 frame1, 40 textvariable=username, 41 width=30 ) 42 username_entry.grid ( row=0, column=1 ) 43 44 # Email Entry 45 email_entry = ttk.Entry ( 46 frame1, 47 textvariable=email, 48 width=30 ) 49 email_entry.grid ( row=1, column=1 ) 50 51 # Password Entry 52 password_entry = ttk.Entry ( 53 frame1, 54 textvariable=password, 55 width=30, 56 show='*' ) 57 password_entry.grid ( row=2, column=1 ) 58 59 frame2 = ttk.Frame ( frame1, padding=(0, 5) ) 60 frame2.grid ( row=3, column=1, sticky=W ) 61 button1 = ttk.Button ( frame2, text='OK', command=ok_click) 62 button1.pack ( side=LEFT ) 63 button2 = ttk.Button ( frame2, text='Cancel', command=quit ) 64 button2.pack ( side=LEFT ) 65 66 root.mainloop() 67 68 print(password.get()) 69 70 71if __name__ == '__main__': 72 main()

他のライブラリーで

Python言語に限定していえば、QtDesignerが使えるPyQTKivyですが。
他の質問者にもお伝えしているのですが、
PythonでGUIアプリ作成は調べるのが大好きな方以外は初心者には全くお勧めできません。

  1. 日本語の公式ドキュメント情報が壊滅的。

あってもサンプルコードか動かないサンプルコード。
必然的に2次情報(誰かのサンプルを見て初心者がQiitaに記事を書いて見ました系)か英語の1次情報を当たる必要があります。
0. 解説内容が他言語でGUIアプリを作成した事がある人向けの内容。
前提知識として
・イベント駆動型プログラミング
・レイアウトマネージャ(tkinterならばpack, grid, place)
この2単語についての理解が必要。

お勧めはC#言語でWPFアプリケーションを作成です。
日本語のサンプルコードが多く悩まないかと。

投稿2018/08/29 05:32

編集2018/08/29 05:47
umyu

総合スコア5846

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

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

iyazyaz

2018/08/29 06:15

どうもありがとうございます。password.get() だったのですね。助かりました。次に進めます。感謝いたします。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問