TkinterでButtonを押したままにする機能を作ってみる


私自身Tkinterを最近使い始めたばかりなので、もしかしたら簡単にできるかもしれませんが
Buttonを押したまま固定する機能がどこを探しても見つかりませんでした。
もしやり方を知っている方が居れば教えていただけますでしょうか。

やり方が見つからかったため、強引に実装してみました。
かなり邪道なやり方なので、参考にならないかもしれませんが、下記に記します。

やりたい事

ボタンを使って、8bitのバイナリを編集するGUIを作りたい。

問題点

Tkinter ButtonでPushしたままにできない?
ButtonをDisableにはできる。
Buttonのラベル(表面上の絵)は変えられる
しかしButtonのreliefは変えられない?

解決策 及び 作った結果

生成されたボタンを破棄して、再度pushしたままのreliefで全部作りなおしてみました。

BinEditor.py
import sys
import tkinter as tk

class BinEditFrame(tk.Frame):
    def __init__(self, master):
        super().__init__(master)
        self.val = 0x00
        self.bits = []
        for i in range(8):
            btn = tk.Button(self,text=str(i), relief='raised', command=self.callback(i))
            btn.pack(sid='right')
            self.bits.append(btn)
        print("start")

    def callback(self, i):
        def push():
            self.val ^= (1<<i)
            print(self.val)

            #All Button Delete
            for bit in self.bits:
                bit.destroy()
            self.bits.clear()

            #All Button ReCreate
            for j in range(8):
                if (self.val & (1<<j) > 0):
                    btn = tk.Button(self,text=str(j), relief='sunken',
                                    command=self.callback(j) )
                else:
                    btn = tk.Button(self,text=str(j), relief='raised',
                                    command=self.callback(j) )
                btn.pack(sid='right')
                self.bits.append(btn)
        return push


if __name__ == "__main__":
    print("BinEditor")
    win = tk.Tk()
    be = BinEditFrame(win)
    be.pack()
    win.mainloop()