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
Post a Comment