我有这个问题:使用循环创建的多个Tkinter小部件充当一个单独的小部件。在示例中 - 如果我创建4个Scale元素,它们都作为一个 - 如果我选择一个滑块 - 所有滑块都被选中。与OptionMenu相同,但按钮没有问题。
示例代码:
def frame4Gui( self ):
for i in range( 0, 4 ):
self . guiElements[ 'Scale' + str( i ) ] = Scale(
self . guiElements[ 'LabelFrame4' ],
variable = self . scaleText[ i ] )
self . guiElements[ 'Scale0' ] . grid( row = 0, column = 0 )
self . guiElements[ 'Scale1' ] . grid( row = 0, column = 1 )
self . guiElements[ 'Scale2' ] . grid( row = 1, column = 0 )
self . guiElements[ 'Scale3' ] . grid( row = 1, column = 1 )
self . createBack( self . guiElements[ 'LabelFrame4' ], 2 )
#Set Up frame4 Gui
self . openFrame( 4, 1 )
更新
这就是我创建scaleText变量的方式:
self . scaleText = self . appendValue( 4, DoubleVar( ) )
def appendValue( self, bound, value ):
emptyList = [ ]
for i in range( 0, bound ):
emptyList . append( value )
return emptyList
答案 0 :(得分:3)
您展示的代码中缺少的基本部分是您创建所有变量(self.scaleText[i]
)的位置。我的猜测是你最终将同一个变量分配给所有scaleText[i]
。
编辑您对所有小部件使用相同的控制变量。 这里:
self . scaleText = self . appendValue( 4, DoubleVar( ) )
创建一个DoubleVar
对象并将其传递给appendValue()
函数,该函数在列表中存储4个副本。因此,您的小部件共享相同的控制变量,从而一致地移动。
对于不熟悉Python / Tkinter的人来说,这种效果似乎有悖常理,所以这里有一个非常简短的解释:
Tkinter
变量会导致与其关联的任何窗口小部件(如果有)相应地更改其当前状态。 (事实上,有一个通用mechanism允许在访问TCL / Tk变量时接收通知。)