Wenn Sie dies ändern, ändert sich dies. Wenn Sie dies ändern, ändert sich dies. Ist es etwas mühsam, die GUIs miteinander zu betreiben?
Durch Registrieren von Rückruffunktionen in den Handlern des jeweils anderen Ich habe versucht, die Veränderungen des anderen zu kommunizieren. Es mag eine einfachere Implementierung geben, aber zuerst konnten wir interagieren.
Rückruf def (i): # Rückruffunktion generieren Wert in jedem Feld einstellen hx.set(i) be.set(i)
hx.setCallback (Rückruf) # Rückruf, wenn sich die Handlerregistrierung in HexSpinbox ändert be.setCallback (Rückruf) # Griffregistrierung in BinEditor Rückruf bei Änderung
MultiBinEditor.py
import tkinter as tk
class HexSpinbox(tk.Spinbox):
def __init__(self, *args, **kwargs):
self.var = tk.StringVar()
self.bytenum = kwargs.pop('bytenum', 1)
self.add_callback = None
max_val = 0x1<<(self.bytenum*8)
super().__init__(*args, **kwargs, textvariable=self.var, from_=0,to=max_val,
increment=1, command=self.callback )
def set(self, val):
s = "0x{:0%dx}" % (self.bytenum*2)
self.var.set(s.format(int(val)))
def get(self):
hstr = super().get()
return int(hstr, 16)
def callback(self):
val = super().get()
self.set(val)
self.add_callback(val) if self.add_callback != None else None
def setCallback(self, func):
self.add_callback = func
class BinEditFrame(tk.Frame):
def __init__(self, master):
super().__init__(master)
self.val = 0x00
self.bits = []
self.add_callback = None
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)
def callback(self, i):
def push():
self.val ^= (1<<i)
self.redraw()
self.add_callback(self.val) if self.add_callback != None else None
return push
def redraw(self):
#All Button Delete
for bit in self.bits:
bit.destroy()
self.bits.clear()
#All Button ReCreate
for i in range(8):
if (self.val & (1<<i) > 0):
btn = tk.Button(self,text=str(i), relief='sunken',
command=self.callback(i) )
else:
btn = tk.Button(self,text=str(i), relief='raised',
command=self.callback(i) )
btn.pack(sid='right')
self.bits.append(btn)
def setCallback(self, func):
self.add_callback = func
def set(self, val):
self.val = int(val)
self.redraw()
if __name__ == "__main__":
print("BinHexEditor")
win = tk.Tk()
hx = HexSpinbox(win)
hx.pack(side=tk.LEFT)
be = BinEditFrame(win)
be.pack(side=tk.LEFT)
def callback(i):
hx.set(i)
be.set(i)
hx.setCallback(callback)
be.setCallback(callback)
win.mainloop()