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

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

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

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

Q&A

解決済

1回答

480閲覧

Python3.10でVBのInputBoxのような動きを表現したい

lotoemon

総合スコア14

Python 3.x

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

0グッド

0クリップ

投稿2022/04/11 12:18

編集2022/04/12 06:48

環境:Windows10

Python初心者です。
VBは多少の経験があり
PythonをVBに模倣しながら学習しています

InputBoxは色々な場面で利用できるように「my_modules」ファルダ内の
modu.pyに「def InputBox(text_str)」という名前で保存してあります。
このInputBox(text_str)を「my_modules」フォルダと同階層にあるmain.pyから
呼び出して、このmain.pyに結果を取得したい

main.pyで取得したデータは
<function InputBox.<locals>.btn_click at 0x000001BF60100700>
でした
InputBox(text_str)内の
tk.messagebox.showinfo('InputBox内の処理です', cmnt_str)
で取得したデータは'1845371454208btn_click'でした。
どのようにしたらmain.pyで"テスト"が取得できるのでしょうか?
宜しくお願いします

'--- VB_Sample.vbs ------ Dim result : resurlt ="テスト" resurlt = InputBox("何か入力して下さい","入力処理",resurlt) Msgbox(resurlt) WScript.Quit #--- main.pyの内容 --- import my_modules if __name__ == "__main__": msg_str = '何か入力後、エンターキーをお願いします。' result_str = my_modules.modu.InputBox(msg_str) print(result_str) #--- modu.pyの内容 --- import tkinter as tk def InputBox(text_str): cmnt_str = "" def btn_click(): cmnt_str = txt.get() txt.insert(tk.END,cmnt_str) tk.messagebox.showinfo('btn内の処理', cmnt_str) base.destroy() base.quit() return cmnt_str def btn2_click(): txt.delete(0, tk.END) base = tk.Tk() base.geometry('300x100') base.title('InputBox') msg = tk.Label(text= text_str) msg.place(x= 10, y= 10) txt = tk.Entry(width=20) txt.place(x= 10, y= 35) txt.insert(tk.END,"テスト") btn2 = tk.Button(base, text= '削除', command= btn2_click) btn2.place(x=50, y=60) btn = tk.Button(base, text= '表示', command= btn_click) btn.place(x=10, y=60) base.mainloop() cmnt_str = btn_click if cmnt_str != "": tk.messagebox.showinfo('InputBox内の処理', cmnt_str) return cmnt_str

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

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

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

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

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

guest

回答1

0

ベストアンサー

回答が無かったので回答してみます。

python

1 base.mainloop() 2 3 cmnt_str = btn_click

質問者さんのコードには、このようにありましたが
btn_clickと書くだけでは関数になるので、関数が返ります。
戻り値を取得するには
cmnt_str = btn_click()
とする必要があります。
が、表示のボタンを押した後btn_clickを実行されるので
そのタイミングで
base.destroy()
base.quit()
が実行されていて、txtからデータを取得する処理が実行できなくなっているかと思います。

どうするのが良い方法か私は知らないし、無理やりかもしれないですが
一応、inputbocみたいには動いたので、そのコードを記載します。

python

1#--- modu.pyの内容 --- 2import tkinter as tk 3from tkinter import messagebox 4 5cmnt_str = "" 6 7def InputBox(text_str): 8 9 def btn_click(): 10 global cmnt_str 11 cmnt_str = txt.get() 12 messagebox.showinfo('btn内の処理', cmnt_str) 13 14 base.destroy() 15 base.quit() 16 17 def btn2_click(): 18 19 txt.delete(0, tk.END) 20 21 base = tk.Tk() 22 23 base.geometry('300x100') 24 base.title('InputBox') 25 26 msg = tk.Label(text= text_str) 27 msg.place(x= 10, y= 10) 28 29 txt = tk.Entry(width=20) 30 txt.place(x= 10, y= 35) 31 txt.insert(tk.END,"テスト") 32 33 btn2 = tk.Button(base, text= '削除', command= btn2_click) 34 btn2.place(x=50, y=60) 35 36 btn = tk.Button(base, text= '表示', command= btn_click) 37 btn.place(x=10, y=60) 38 39 base.mainloop() 40 41 if cmnt_str != "": 42 43 messagebox.showinfo('InputBox内の処理', cmnt_str) 44 45 return cmnt_str 46

投稿2022/04/12 13:09

xail2222

総合スコア1497

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問