python - one scale controls other scale values in tkinter python3 -


i wonder if guys can me scale widget in tkinter. have 3 scales (scale1, scale2 , scale3). use scale1 controls values of scale2 , scale3 don't want scale2 , scale3 having same value of scale1. example: value of scale1 1, value of scale2 2.5 , value of scale3 1.5. when move scale1 right increase value 1.05, value of scale2 2.55 , scale3 1.55 or move scale1 left decrease value 0.95, scale2's value 2.45 , scale3's value 1.45

hope guys me. thank much. here code.

from tkinter import * tkinter import ttk  class init(object):     def __init__(self, master):         self.master = master         self.master.title('scale demo')         self.master.configure(background='#ededed')         self.scale_1_var = doublevar()         self.scale_1_var.set(1)         self.scale_2_var = doublevar()         self.scale_2_var.set(1)         self.scale_3_var = doublevar()         self.scale_3_var.set(1)  class scale(init):     def __init__(self, master):         init.__init__(self, master=master)          self.frame_master = ttk.frame(self.master, padding=(10,10,10,10))         self.frame_master.pack(fill=both)          self.label_1 = ttk.label(self.frame_master, text='scale 1:')         self.label_1.grid(row=0, column=1, sticky='w')         self.scale_1 = ttk.scale(self.frame_master, orient=horizontal, length=400, from_=0, to=4, variable=self.scale_1_var)         self.scale_1.grid(row=0, column=2, sticky='we')         self.entry_1 = ttk.entry(self.frame_master, textvariable=self.scale_1_var, width=3)         self.entry_1.grid(row=0, column=3, sticky='e')          self.label_2 = ttk.label(self.frame_master, text='scale 2:')         self.label_2.grid(row=1, column=1, sticky='w')         self.scale_2 = ttk.scale(self.frame_master, orient=horizontal, length=400, from_=0, to=4, variable=self.scale_2_var)         self.scale_2.grid(row=1, column=2, sticky='we')         self.entry_2 = ttk.entry(self.frame_master, textvariable=self.scale_2_var, width=3)         self.entry_2.grid(row=1, column=3, sticky='e')          self.label_3 = ttk.label(self.frame_master, text='scale 3:')         self.label_3.grid(row=2, column=1, sticky='w')         self.scale_3 = ttk.scale(self.frame_master, orient=horizontal, length=400, from_=0, to=4, variable=self.scale_3_var)         self.scale_3.grid(row=2, column=2, sticky='we')         self.entry_3 = ttk.entry(self.frame_master, textvariable=self.scale_3_var, width=3)         self.entry_3.grid(row=2, column=3, sticky='e')          self.scale_1.config(command=self.sc1)      def sc1(self, *argv):         self.a = self.scale_1.get()         self.scale_2.set(self.a)         self.scale_3.set(self.a)  root=tk() scale(root) root.mainloop() 

here i've done:

def sc1(self, *argv):         self.a = float(argv[0])          # rather re-request value resulting in more function calls         # i'm using value passed in during callback         if not hasattr(self, "a_prev"): # hacky method              self.a_prev = 1             # remember previous value          b_diff = self.scale_2.get() - self.a_prev          c_diff = self.scale_3.get() - self.a_prev         # calculate differences previous value          self.scale_2.set(self.a+b_diff) # set scales         self.scale_3.set(self.a+c_diff)         self.a_prev = self.a # remember current value new previous 

Comments