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

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

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

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

Tkinter

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

Q&A

解決済

2回答

7508閲覧

Python tkinter エディットボックスの値を更新したい

goki_gottan

総合スコア168

Python 3.x

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

Tkinter

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

0グッド

0クリップ

投稿2019/04/20 19:25

Python3で、tkinterを使用して、当初入っていたエディットボックスの値(初期値)を
フォルダダイアログ(またはファイル)で取得した値(フォルダ名、ファイル名)に変更したい。

Static3 = tkinter.Label(text=u'参照先', width=18,height=1,font=('Helvetica', '11',"bold"),foreground='#000000', background='#ffaacc') Static3.place(x=50, y=120) #エントリー EditBox3 = tkinter.Entry(width=50,font=('Helvetica', '11',"bold"),) EditBox3.insert(tkinter.END,r"C:\Users\Desktop") EditBox3.place(x=240, y=120)

と、初期値はデスクトップをパス名としております。
ファイルダイアログを開くボタンを設け、そのボタンを押すと、
ダイアログが開き、ファイルを選択できるようにし、選択したファイル名をエディットボックス(Static3)に
入れたいです。

#ディレクトル参照 typ = [('csvファイル','*.csv')] dir = os.getcwd() def callback3(event): fle = tkinter.filedialog.askopenfilename(filetypes = typ, initialdir = dir) Button3 = tkinter.Button(text=u'参照', width=5,height=1,font=('Helvetica', '11',"bold"),foreground='#000000', background='#ffaacc') Button3.bind("<Button-1>",callback3) Button3.place(x=650, y=75)

上記コードは、ボタンを押し、ファイルを取得するコードです。
fleに値が入ると思うのですが、その後どのように書けばいいでしょうか。

ボタンを押すと、ラベル更新という説明のあったサイトがあったので、
参考にしましたが、ラベルを更新するだけでエディットボックスは分かりませんでした。
stringVarを使うのでしょうか。

ご教示いただけないでしょうか。

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

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

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

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

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

guest

回答2

0

ベストアンサー

以下のように.delete.insertを組み合わせると良いかと思います。

Python

1import tkinter, tkinter.filedialog 2 3def onbtn(): 4 file = tkinter.filedialog.askopenfilename() 5 ent.delete(0,tkinter.END) 6 ent.insert(0,file) 7 8root = tkinter.Tk() 9btn = tkinter.Button(root,text='参照',command=onbtn) 10btn.pack() 11 12ent = tkinter.Entry(root,width=100) 13ent.pack() 14 15root.mainloop()

投稿2019/04/21 01:56

can110

総合スコア38262

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

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

KSwordOfHaste

2019/04/21 11:22

Entryのtextvariable引数にStringVarを指定した方が簡単かと思ったのですが・・・やってみると、delete/insertの方はカーソル位置が必ず置き換えた後の文字列の末尾になるのに対し、textvariableを使うとEntryのカーソル位置が元の位置のまま変わらないという違いに気づきました。微妙な違いですがUIとしてはdelete/insertに一票入れたくなりました。
can110

2019/04/21 11:42

なるほど、カーソル位置の違いがあるのですね。気づきませんでした。 コメントありがとうございます。
guest

0

おはようございます。

問題文読ませていただきました。

こんな感じでいかがでしょうか?

python

1import tkinter as tk 2from tkinter import filedialog 3import os 4 5class Application(tk.Frame): 6 # entry Widget入力用変数 7 entry = None 8 # file dialogにて選択できるファイル形式を.csvのみにする。 9 fileType = [('csvファイル', '*.csv')] 10 # file dialogを開いた時に、現在のディレクトリを初期ディレクトリとする。 11 dir = os.getcwd() 12 13 # dialogを開いて、「ファイル名 : 〇〇, フォルダ名 : 〇〇」とentry Widgetの値へ格納する。 14 def openFile(self): 15 # file dialogを開く 16 # filetypes : ファイル形式を絞り込む 17 # initialdir : 初期ディレクトリを設定する 18 # file dialogについて : https://kuroro.blog/python/Um9TeIMMJAZdFqTYKVE6/ 19 res = filedialog.askopenfilename(filetypes=self.fileType, initialdir=self.dir) 20 # 参考 : https://note.nkmk.me/python-os-basename-dirname-split-splitext/ 21 # ファイル名を取得する。 22 filename = os.path.basename(res) 23 # 参考 : https://note.nkmk.me/python-os-basename-dirname-split-splitext/ 24 # フォルダ名を取得する。 25 foldername = os.path.basename(os.path.dirname(res)) 26 # 前回格納されるentry Widget内の値をリセットする。 27 self.entry.delete(0, tk.END) 28 # entry Widgetへ値を格納する。 29 self.entry.insert(0, '「ファイル名 : ' + filename + ', フォルダ名 : ' + foldername + '」') 30 31 def __init__(self, master=None): 32 # Windowの初期設定を行う。 33 super().__init__(master) 34 35 # Windowの画面サイズを設定する。 36 # geometryについて : https://kuroro.blog/python/rozH3S2CYE0a0nB3s2QL/ 37 self.master.geometry("300x200") 38 39 ############################################## frame Widget START ############################################## 40 41 # Windowを親要素として、frame Widget(Frame)を作成する。 42 # frameについて : https://kuroro.blog/python/P20XOidA5nh583fYRvxf/ 43 frame = tk.Frame(self.master) 44 45 # Windowを親要素とした場合に、frame Widgetをどのように配置するのか? 46 # packについて : https://kuroro.blog/python/UuvLfIBIEaw98BzBZ3FJ/ 47 frame.pack() 48 49 ############################################## frame Widget END ############################################## 50 51 # frame Widget(Frame)を親要素として、entry Widgetを作成する。 52 # Entryについて : https://kuroro.blog/python/PUZp77YFxrXvMCjpZbUg/ 53 self.entry = tk.Entry(frame) 54 # frame Widget(Frame)を親要素とした場合に、entry Widgetをどのように配置するのか? 55 # gridについて : https://kuroro.blog/python/JoaowDiUdLAOj3cSBxiX/ 56 self.entry.grid(row=0, column=0, padx=10, pady=10) 57 58 # frame Widget(Frame)を親要素として、button Widgetを作成する。 59 # text : テキスト情報 60 # command : ボタンがクリックされた場合に実行する関数を指定する。self.openFileとする。 61 # Buttonについて : https://kuroro.blog/python/oFju6EngDtcYtIiMIDf1/ 62 button = tk.Button(frame, text='ファイル選択', command=self.openFile) 63 # frame Widget(Frame)を親要素とした場合に、button Widgetをどのように配置するのか? 64 # gridについて : https://kuroro.blog/python/JoaowDiUdLAOj3cSBxiX/ 65 button.grid(row=0, column=1, padx=10, pady=10) 66 67 68# Tkinter初学者参考 : https://docs.python.org/ja/3/library/tkinter.html#a-simple-hello-world-program 69if __name__ == "__main__": 70 root = tk.Tk() 71 app = Application(master=root) 72 # Windowをループさせて、継続的にWindow表示させる。 73 # mainloopについて : https://kuroro.blog/python/DmJdUb50oAhmBteRa4fi/ 74 app.mainloop()

ご確認のほど、よろしくお願いいたします。????‍♂️

投稿2021/06/09 22:45

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問