Python:Tkinter 多个小部件充当一个部件

标签 python user-interface tkinter

我有这个问题:使用循环创建的多个 Tkinter 小部件充当一个小部件。例如 - 如果我创建 4 个 Scale 元素,它们都充当一个元素 - 如果我选择一个 slider - 所有 slider 都会被选中。 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

最佳答案

您所显示的代码中缺少的重要部分是创建所有变量的位置 (self.scaleText[i])。我的猜测是,您最终将相同的变量分配给所有 scaleText[i]

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

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

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

对于不熟悉 Python/Tkinter 的人来说,这种效果可能看起来违反直觉,所以这里有一个非常简短的解释:

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

关于Python:Tkinter 多个小部件充当一个部件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13191739/

相关文章:

python - Django timezone.make_aware 为 2014-10-26 1 :45:00 引发了 AmbiguousTimeError

Python 运行时错误(SyntaxErrorException): default value must be specified here

python - 亚马逊 AWS 任务自动化

java - swing:有没有办法改变复选框/单选按钮的颜色?

python - 在文本小部件中标记 - tkinter

python - 如何在阿拉伯语 tkinter Combobox 中编写标签?

python - 如何在 tkinter Entry 小部件中仅插入一些指定字符

python - 'ForeignRelatedObjectsDescriptor' 对象没有属性 'all'

delphi - 如何在Delphi中添加TLabel到菜单栏?

ios - 处理版本控制系统和 xcode Storyboard的最佳方法是什么?