2015-07-13 88 views
0

我不知道你們是否可以用tkinter中的Scale小部件來幫助我。 我有3個尺度(scale1,scale2和scale3)。我想使用scale1來控制scale2和scale3的值,但我不希望scale2和scale3具有相同的scale1值。例如:scale1的值爲1,scale2的值爲2.5,scale3的值爲1.5。當我將scale1向右移動以將其值增加到1.05時,scale2的值將爲2.55,scale3將爲1.55,或者我將scale1向左移動以將其值減小到0.95,scale2的值將爲2.45,scale3的值將會是1.45一個比例控制tkinter中的其他比例值python3

希望你們能幫助我。 非常感謝。 這是我的代碼。

from tkinter import * 
from 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() 

回答

1

這裏是我做了什麼:

def sc1(self, *argv): 
     self.a = float(argv[0]) 
     # rather than re-request the value resulting in more function calls 
     # i'm using the value that is passed in during the callback 
     if not hasattr(self, "a_prev"): # this is a hacky method to 
      self.a_prev = 1    # remember the previous value 

     b_diff = self.scale_2.get() - self.a_prev 
     c_diff = self.scale_3.get() - self.a_prev 
     # calculate the differences to the previous value 

     self.scale_2.set(self.a+b_diff) # set the scales 
     self.scale_3.set(self.a+c_diff) 
     self.a_prev = self.a # remember current value as the new previous 
+0

非常感謝你的幫助。這是我正在尋找的。非常感激... – ryanvolap