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

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

新規登録して質問してみよう
ただいま回答率
85.46%
ファイル

ファイルとは、文字列に基づいた名前又はパスからアクセスすることができる、任意の情報のブロック又は情報を格納するためのリソースです。

関数

関数(ファンクション・メソッド・サブルーチンとも呼ばれる)は、はプログラムのコードの一部であり、ある特定のタスクを処理するように設計されたものです。

保存

保存(save)とは、特定のファイルを、ハードディスク等の外部記憶装置に記録する行為を指します。

Python

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

Q&A

解決済

1回答

2006閲覧

python・tkinter:notebook()ウィジェットのタブの名前を、編集中のファイル名にしたい/編集したテキストの上書き保存をする関数を定義したい

退会済みユーザー

退会済みユーザー

総合スコア0

ファイル

ファイルとは、文字列に基づいた名前又はパスからアクセスすることができる、任意の情報のブロック又は情報を格納するためのリソースです。

関数

関数(ファンクション・メソッド・サブルーチンとも呼ばれる)は、はプログラムのコードの一部であり、ある特定のタスクを処理するように設計されたものです。

保存

保存(save)とは、特定のファイルを、ハードディスク等の外部記憶装置に記録する行為を指します。

Python

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

0グッド

0クリップ

投稿2021/07/16 12:56

編集2021/07/18 13:03

前置き

こんにちは。
pythonにて、ネット上で見つけたソースコードを母体としてテキストエディタを作成していますが、問題が発生してしまいました。
発生した問題(疑問点)を解決する方法をご教授いただきたいなと思います。

該当のソースコード

python

1# tkinterのインポート 2import tkinter 3import tkinter as tk 4import tkinter.ttk as ttk 5import tkinter.font as font 6from tkinter.filedialog import askopenfilename 7import os 8import ctypes 9try: 10 ctypes.windll.shcore.SetProcessDpiAwareness(True) 11except: 12 pass 13 14 15 16# rootメインウィンドウの設定 17root = tk.Tk() 18 19my_font = font.Font(root,family = "游ゴシック") 20 21def new_text(): 22 import pathlib 23 file = pathlib.Path("./writed_file") 24 file.touch() 25 26def open_text(): 27 typ = [('html Files', '*.html;*.css;*.js')] 28 filepath = askopenfilename(filetypes=typ) 29 if not filepath: 30 return 31 text_widget.delete('1.0', tkinter.END) 32 with open(filepath, "r", encoding="utf-8") as open_file: 33 text = open_file.read() 34 text_widget.insert(tkinter.END, text) 35 root.title(f'colony - {filepath}') 36 37def naming_file_save(): 38 from tkinter.filedialog import asksaveasfilename 39 typ = [('html Files', '*.html;*.css;*.js')] 40 filepath = asksaveasfilename(defaultextension="txt",filetypes=typ) 41 if not filepath: 42 return 43 with open(filepath, "w") as save_file: 44 text = text_widget.get("1.0", tkinter.END) 45 save_file.write(text) 46 root.title(f"colony - {filepath}") 47 48 49def btn_click(): 50 t1, t2 = txt_1.get(), txt_2.get() 51 if t1[-1] == '/': 52 pass 53 else: 54 t1 += '/' 55 file_pass = t1 + t2 56 text = text_widget.get('1.0','end -1c') 57 f = open(file_pass, 'w') 58 f.write(text) 59 f.close() 60 61def test(): 62 print("test") 63 64###問題1 編集したファイルを上書き保存する関数を定義したい 65###問題2 新しいファイル(タブ)を新規作成する関数を定義したい 66#メニューバー 67menubar = tkinter.Menu(root) 68filemenu = tkinter.Menu(menubar, tearoff=0) 69 70 71 72filemenu = tkinter.Menu(menubar, tearoff=0) 73filemenu.add_command(label = "新規(N)",command = new_text) 74filemenu.add_command(label = "開く(O)...",command = open_text) 75filemenu.add_command(label = "上書き保存(S)") 76filemenu.add_command(label = "名前を付けて保存(A)...",command = naming_file_save) 77filemenu.add_separator() 78filemenu.add_command(label = "colonyの終了(X)", command = root.destroy) 79 80 81menubar.add_cascade(label = "ファイル(F)", menu = filemenu) 82 83editmenu = tkinter.Menu(menubar, tearoff=0) 84editmenu.add_command(label = "NONE") 85 86formatmenu = tkinter.Menu(menubar, tearoff = 0) 87editmenu.add_command(label = "基本のjavascript形式(alt+I+J)") 88editmenu.add_command(label = "基本のcss形式(alt+I+c)") 89editmenu.add_command(label = "基本のhtml形式(alt+I+h)") 90editmenu.add_command(label = "写真の挿入(alt+I+p)") 91editmenu.add_command(label = "動画の挿入(alt+I+M)") 92filemenu.add_separator() 93 94menubar.add_cascade(label = "オート入力(I)", menu = editmenu) 95 96viewmenu = tkinter.Menu(menubar, tearoff = 0) 97viewmenu.add_command(label = "NONE") 98menubar.add_cascade(label = "表示(V)", menu = viewmenu) 99 100root.config(menu = menubar) 101 102 103# Notebookウィジェットの作成 104notebook = ttk.Notebook(root) 105 106# タブの作成 107tab_one = tk.Frame(notebook, bg='white') 108tab_two = tk.Frame(notebook, bg="white") 109 110# notebookにタブを追加 111notebook.add(tab_one, text="text")###問題3 notebookの名前を、編集するファイル名にしたい 112notebook.add(tab_two, text="tab2") 113 114# tab_oneに配置するウィジェットの作成 115text_widget = tk.Text(tab_one,wrap = tk.NONE,font = my_font,borderwidth = 1) 116text_widget.configure(fg="#3A4861") 117root.columnconfigure(0, weight = 1) 118root.rowconfigure(0, weight = 1) 119yscroll = ttk.Scrollbar(tab_one, command=text_widget.yview,orient=tk.VERTICAL) 120xscroll = ttk.Scrollbar(tab_one, command=text_widget.xview, orient=tk.HORIZONTAL) 121text_widget['yscrollcommand'] = yscroll.set 122text_widget['xscrollcommand'] = xscroll.set 123 124# ウィジェットの配置 125notebook.pack(expand=True, fill='both') 126text_widget.place(width=1900,height=928) 127yscroll.pack(side=tk.RIGHT, fill = "y") 128xscroll.pack(side=tk.BOTTOM, fill = "x") 129root.title("テスト") 130root.geometry("1500x750") 131root.state("zoomed") 132root.mainloop()

###解決したいこと
現在発生している問題点
・notebook()の名前を、insert()したファイル名を表示させたい↓
イメージ説明
・編集したファイルを上書き保存する関数を定義したい

です。
どちらもいろいろ調べてみましたが、どれも失敗したり、よく理解できなかったりと、難題です。
回答宜しくお願いします。

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

python ver.3.9
開発環境↓
atom エディタ
atom-runner

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

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

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

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

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

guest

回答1

0

ベストアンサー

・ファイル名を表示させたい
・編集したファイルを上書き保存する関数を定義したい

Python

1read_fpath = '' # global 変数追加 2 3def open_text(): 4 typ = [('html Files', '*.html;*.css;*.js')] 5 filepath = askopenfilename(filetypes=typ) 6 if not filepath: 7 return 8 text_widget.delete('1.0', tkinter.END) 9 #with open(filepath, "r", encoding="utf-8") as open_file: 10 with open(filepath, "r", encoding="utf-8", newline='') as open_file: # 変更 11 text = open_file.read() 12 text_widget.insert(tkinter.END, text) 13 root.title(f'colony - {filepath}') 14 notebook.tab(tab_one, text=os.path.basename(filepath)) # 追加 15 global read_fpath # 追加 16 read_fpath = filepath # 追加 17 18def overwrite_file(): # 追加 19 global read_fpath 20 with open(read_fpath, "w", encoding="utf-8", newline='') as save_file: 21 text = text_widget.get("1.0", tkinter.END) 22 save_file.write(text) 23 root.title(f"colony - {read_fpath}") 24 25#filemenu.add_command(label = "上書き保存(S)") 26filemenu.add_command(label = "上書き保存(S)",command = overwrite_file) # 変更

読み込んだファイルを書き込むのであれば newline='' を指定して改行コードを変更しないのが良いかと思います。

投稿2021/07/17 07:25

lehshell

総合スコア1147

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

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

退会済みユーザー

退会済みユーザー

2021/07/18 12:52

回答有り難うございます!無事できました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.46%

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

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

質問する

関連した質問