Python:Tkinter multiple小部件充当

2024-06-28 11:02:59 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个问题:用一个循环创建的多个Tkinter小部件充当一个单独的小部件。在示例中-如果我创建4个缩放元素,它们都作为一个-如果我选择一个滑块-所有滑块都被选中。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变量:

^{pr2}$

Tags: self元素示例部件tkintercolumn按钮grid
1条回答
网友
1楼 · 发布于 2024-06-28 11:02:59

您所展示的代码中缺少的关键部分是创建所有变量(self.scaleText[i])。我的猜测是,您最终将同一个变量分配给所有scaleText[i]

编辑对所有小部件都使用相同的控制变量。 这里:

self . scaleText = self . appendValue( 4, DoubleVar( ) )

创建一个DoubleVar对象并将其传递给appendValue()函数,该函数在一个列表中存储它的4个副本。因此,您的小部件共享同一个控制变量,从而同步移动。在

对于不熟悉Python/Tkinter的人来说,这种效果似乎有悖常理,因此这里有一个非常简短的解释:

  • 在Python中,对象是通过引用传递的,因此当将对象分配给变量(或将其传递给函数)时,只需创建对现有对象的新引用。在
  • 更改Tkinter变量会导致与其关联的任何小部件(如果有)相应地更改其当前状态。(事实上,有一个通用的mechanism允许在访问TCL/Tk变量时接收通知)。在

相关问题 更多 >