私は、ボタンを押してノートを切り替えることができるプログラムを持っているノートを持っています。これは私のために便利です。私は、テキストボックスにアクティブなノートがあるときに、そのテキストボックスの中でキーボードの任意のキーを押してから別のグループのノートを選択しようとすると、節約する。キー押下を検出するのではなく、TextBoxが編集されたことを検出していますか?
これはうまくいきますが、キーを押すのではなく、ノートが変更されたかどうかを検出する方法を見つける必要があります。この理由は、ポップアップ警告を引き起こすイベントを動かすことなく、私のメモのセクションをコピーするのに"CTRL-C"
を使用することができません。テキストボックス内のテキストが編集されていない限り、ノートのグループから別のグループにジャンプすることができます。
"CTRL-C"
で強調表示しているテキストをコピーしようとすると、ノートを切り替えると、切り替えたいかどうかを確認するメッセージが表示されます。私はこれを避けようとしており、テキストボックス内にkeypress
を検出するのではなく、変更があったかどうかをチェックする方法があるはずです。
textvariable
をtrack
と使用しようとしましたが、テキストボックスにはそのオプションを使用できないようです。
以下は、テキストボックスに入力する方法と、別の一連のメモを開くことを選択すると、続行するかどうかを尋ねる簡単な例です。
from tkinter import *
from tkinter import messagebox
class MiniApp(Frame):
def __init__(self, master, *args, **kwargs):
Frame.__init__(self, master, *args, **kwargs)
self.master = master
self.text_is_edited = False
self.add_text = Button(self.master, text = "Add text to TextBox", command = self.add_to_text)
self.add_text.grid(row = 0, column = 0, sticky = "we")
self.add_text = Button(self.master, text = "Add text to TextBox", command = self.add_to_text_2)
self.add_text.grid(row = 0, column = 1, sticky = "we")
self.text = Text(self.master, width = 35, height = 3)
self.text.grid(row = 1, column = 0, columnspan = 2, sticky = "nsew")
self.text.bind('<Key>', self.is_text_edited)
def add_to_text(self):
if self.text_is_edited == False:
self.text.delete(1.0, "end-1c")
self.text.insert("end-1c", "Some other text to work with.\nMore text.")
self.text.see("end-1c")
else:
answer = messagebox.askquestion("Update TextBox",
"Are you sure you want change the content of the TextBox? Any unsaved changed will be lost!")
if answer == "yes":
self.text.delete(1.0, "end-1c")
self.text.insert("end-1c", "Some other text to work with.\nMore text.")
self.text.see("end-1c")
self.text_is_edited = False
def add_to_text_2(self):
if self.text_is_edited == False:
self.text.delete(1.0, "end-1c")
self.text.insert("end-1c", "Text to test with.\nMore text.")
self.text.see("end-1c")
else:
answer = messagebox.askquestion("Update TextBox",
"Are you sure you want change the content of the TextBox? Any unsaved changed will be lost!")
if answer == "yes":
self.text.delete(1.0, "end-1c")
self.text.insert("end-1c", "Text to test with.\nMore text.")
self.text.see("end-1c")
self.text_is_edited = False
def is_text_edited(self, *args):
if self.text_is_edited == False:
self.text_is_edited = True
if __name__ == "__main__":
root = Tk()
app = MiniApp(root)
root.mainloop()
ありがとうブライアン。それは完璧に働いた。私はこれで、ファイルが編集されている場合に保存を扱う他の機能も簡単にすることができると思います。 –
@SierraMountainTech:フラグが変更されるたびにコールバックが必要な場合は、 '<>'仮想イベントにバインドすることもできます。 –
'<>'イベントを 'self.text.edit_modified(False)'のようにリセットする方法はありますか?本当にあなたの答えは私がこの仕事をするために必要なものでした。 'edit_modified()'ステータスを変更することなく、テキストフィールドから日付をコピーできるようになりました。それが私のプログラムの大きなハングアップでした。 –