2015-05-13 39 views
1

我是python和Tkinter的新手,我试图在缩放/滑块值更改时获取比例/滑块的名称。我已经成功使用Python - Tkinter - 获取比例/滑块的名称和值

self.slider = tk.Scale(self.root, from_=0, to=100, 
          orient="horizontal") 
     self.slider.bind("<ButtonRelease-1>", self.updateValue) 

获得价值尺度

def updateValue(self, event): print self.slider.getName()

我想做到像它在Java中像做:

JSlider object = (JSlider) evt.getSource(); 

这样我就可以获得比例的名称和价值。 有没有办法在Python中做到这一点。非常感谢

+1

只是为了澄清:您打算将同一个回调命令附加到多个滑块,并且想要获取从'event'使用的滑块? –

+0

@tobias_k是的,所以它可以得到每个滑块的名称和值 – Rob177

+0

@tobias_k谢谢,你认为我可以只为每个滑块做一个字符串,并使用它作为名称:scale1 =“ScaleName”。 – Rob177

回答

2

您可以从event获得widget,检查它是否为Scale并获得get()的值。要获取小部件的名称,请使用cget("label")(假设您通过“名称”来表示该小部件的标签)。事情是这样的:

def updateValue(self, event): 
    w = event.widget 
    if isinstance(w, tk.Scale): 
     print repr(w) 
     print w.get() 
     print w.cget("label") 

使用这样的(相同的代码,但增加了label参数):

self.slider = tk.Scale(self.root, label="First Slider", from_=0, to=100, orient="horizontal") 
self.slider.bind("<ButtonRelease-1>", self.updateValue) 

但是请注意,这仅与bind工作,不与command参数,作为command回调没有得到Event,但只是作为参数的新值。此外,这仅适用于Tkinter.Scale,而不适用于ttk.Scale,因为后者没有label参数。

+0

@tobais_k非常感谢,尽管对名字感到羞耻。 – Rob177

+0

@ Rob177您可以使用'Scale'''label'属性。将它与'ttk.Scale'混淆,它没有一个。 –

+0

感谢您的全力帮助。 – Rob177