2016-11-09 26 views
0

ボタンのクリックをテキストファイルに保存する方法を知っている人がいますか?たとえば、 "hello"という文字列のボタンが押された場合、それはテキストファイルに保存され、「こんにちは」ボタンが押されたことを示します。ボタンをテキストファイルに保存する方法はありますか?

+0

あなたは、あなたがそれを行うには、いくつかの機能を割り当てることができ、すべてのボタンとコマンド '='や 'バインド()'を使用する場合。 – furas

答えて

0

いいえ、何も組み込まれていません。カスタムバインディングを追加する必要があります。

たとえば、Buttonクラスにクラスバインディングを追加できます。たとえば:もちろん

def log_buttonpress(self, event): 
    with open("/tmp/log.txt", "a+") as f: 
     f.write("=> " + event.widget.cget("text") + "\n") 

は、これが唯一のマウスでクリックをキャプチャします:

root.bind_class("Button", "<ButtonPress-1>", log_buttonpress, add="+") 

あなたは、このようになりますlog_buttonpressと呼ばれるメソッドを定義することができます。キーボードを使用してクリックされたボタンはキャプチャされません。また、ボタンを離すまでボタンのコマンドは呼び出されないので、クリックされたが実際にはアクティブ化されなかったボタンがログに記録される可能性があります。これらの問題は解決できますが、より多くのコードが必要です。これは一般的な概念であり、カットアンドペーストのソリューションではありません。

Buttonという独自のサブクラスを作成し、この特殊バインディングを各インスタンスに追加する別の方法です。バインドタグを使用すると、すべてのインスタンスに特別なタグを追加することができ、そのタグに対して単一のバインディングを持たせるだけで済みます。例えば

class MyButton(tk.Button): 
    def __init__(self, *args, **kwargs): 
     tk.Button.__init__(self, *args, **kwargs) 
     bindtags = list(self.bindtags()) 
     bindtags.insert(1, "MyButton") 
     self.bindtags(tuple(bindtags)) 

    @classmethod 
    def log_button(cls, event): 
     with open("/tmp/junk.txt", "a+") as f: 
      f.write("?> " + event.widget.cget("text") + "\n") 

... 
root = tk.Tk() 
root.bind_class("MyButton", "<ButtonRelease-1>", MyButton.log_button) 

b1 = MyButton(...) 
b2 = MyButton(...) 
+0

ありがとうございました:)これは私をとても助けました:) – Supertraff

関連する問題