【问题标题】:Object order in StackLayout (Kivy)StackLayout 中的对象顺序 (Kivy)
【发布时间】:2016-09-23 19:59:46
【问题描述】:

我有一个

layout = StackLayout()

现在我放了这样的按钮

for x in range(9): # range() explanation: http://pythoncentral.io/pythons-range-function-explained/
            bt = Button(text=' ', font_size=200, width=200, height=200, size_hint=(None, None), id=str(x+1))
            bt.bind(on_release=self.btn_pressed)
            layout.add_widget(bt)

问题是,当我通过 layout.children 数组并显示它们的 id 时,它们是按顺序排列的 9,8,7,6,5,4,3,2,1,这是颠倒的,而不是我想要的。我怎样才能让它们按正确的顺序排列? (反转数组不是解决办法)

另一个例子

我有:

        self.layout = StackLayout()
        bt = Button(text='1', font_size=200, width=200, height=200, size_hint=(None, None), id="1")
        bt1 = Button(text='2', font_size=200, width=200, height=200, size_hint=(None, None), id="2")
        bt2 = Button(text='3', font_size=200, width=200, height=200, size_hint=(None, None), id="3")
        bt3 = Button(text='4', font_size=200, width=200, height=200, size_hint=(None, None), id="4")
        bt4 = Button(text='5', font_size=200, width=200, height=200, size_hint=(None, None), id="5")
        bt5 = Button(text='6', font_size=200, width=200, height=200, size_hint=(None, None), id="6")
        self.layout.add_widget(bt, 1)
        self.layout.add_widget(bt1, 2)
        self.layout.add_widget(bt2, 3)
        self.layout.add_widget(bt3, 4)
        self.layout.add_widget(bt4, 5)
        self.layout.add_widget(bt5, 6)

这告诉我这个:

【问题讨论】:

  • 你为什么关心它被反转?
  • 从 0 到 X 读写完全有道理,为什么要颠倒,哈哈?
  • 我真的不知道为什么这对你很重要
  • 我想添加小部件,然后使用某种标识符(int 或 string)访问它们
  • 然后是广告小部件并访问它们。尝试编写一些代码并向我们展示它失败的地方

标签: python layout kivy


【解决方案1】:

Kivy 将此处的顺序颠倒了,原因与内部调度顺序有关。这不是必须的,但这是一个设计决定。

但是,这根本不重要。如果您想将对象存储在某种特定结构中,请自行执行。

【讨论】:

  • 当然,我可以通过创建自己的数组或反转子数组来解决这个问题。但是你是如何做出这个设计决定的,我的意思是,来吧,我还没有在其他任何地方看到这个。
  • 您至少可以在文档中提到这一点并提出一些最佳实践,我不知道...但似乎不正确,尽管这不是致命的例外...
  • 您知道这有时也会耗尽内存,对吧?不过没关系,反正python对内存不友好……
  • 列表的顺序与使用的内存量无关。
  • 这种排序的原因是,对于某些事情,有必要以相反的添加顺序遍历孩子。设计这个的人认为在加法时倒车的便利是最好的选择。我不确定这是不是最好的决定,但我也真的不认为它很重要,做你想做的事完全是微不足道的,而且你很少需要手动遍历孩子。
【解决方案2】:

一个可能的技巧是:

y = 10

for x in range(y):
        bt = Button(text=' ', font_size=200, width=200, height=200, size_hint=(None, None), id=str(y-x))
        bt.bind(on_release=self.btn_pressed)
        layout.add_widget(bt)

【讨论】:

  • 当这应该成为标准时,为什么我需要技巧?来吧,我第一次在 Python 中看到这个,尤其是 Kivy...不是有一个正常的有序数组,为什么孩子数组是反转的?
  • 我应该设置方向吗?
  • 可能。有效方向为“lr-tb”、“tb-lr”、“rl-tb”、“tb-rl”、“lr-bt”、“bt-lr”、“rl-bt”和“bt-rl” .
  • 是的,但这只是用于前面放置,而不是关于阵列本身。数组本身与实际向用户显示的内容相反? 基维,真的吗?
  • 查看kivy的创建者现在发布的答案
猜你喜欢
  • 2020-08-20
  • 2017-09-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多