我基本上遇到了问题,只有“grabbable”散布区域完全由我正在查看程序的窗口大小定义,而不是散布大小。Kivy散布区域被限制为窗口大小
下面是错误的工作示例:
from kivy.app import App
from kivy.uix.widget import Widget
from kivy.uix.button import Button
from kivy.uix.gridlayout import GridLayout
from kivy.uix.scatter import Scatter
class AppFrame(GridLayout):
def __init__(self,**kwargs):
super(AppFrame,self).__init__(**kwargs)
self.myscatter=Scatter(
width=2000,
height=200,
do_rotation=False,
do_scale=True,
do_translation=True)
self.add_widget(self.myscatter)
self.layout=GridLayout(cols=30,width=2000,height=200)
self.myscatter.add_widget(self.layout)
for i in range(300):
self.layout.add_widget(Button(text=str(i)))
class TestApp(App):
def build(self):
return AppFrame(cols=3)
if __name__ == '__main__':
TestApp().run()
在我的屏幕上,如果我使用分散移动到右侧(与按键增加),我不能抢东西过去按钮〜10 -11。如果我调整屏幕大小,我可以稍微抓一点。如果我将屏幕缩小,可抓取区域会缩小,甚至可能无法到达。我怎样才能解决这个问题?
我在Android模拟器中使用Kivy环境,所以我有一个非常大的屏幕。不幸的是,如果我将它移动到手机上,屏幕尺寸会显着缩小,从而使此错误有效地禁用滚动。
(顶层布局是添加菜单不包括实际的菜单在这个例子中,因为它没有必要重新创建错误。)
我想弄清楚的主要事情是:
- 这是代码或android模拟器的问题?
- 如果它的代码有问题,它可以被修复吗?
- 如果无法修复,我还能如何获得此功能?
UPDATE: 从乔治和尚的评论后,我已经分离出的问题是分散的BBOX内。创建时,分散的bbox大小为2000x200。但是,创建窗口后,它是800x600(弹出屏幕的默认大小)。
令人烦恼的是,我无法弄清楚如何解决这个问题。如果我在任何点(即按钮中)更改散点图的宽度/高度,则每当发生平移/缩放时,立即将其重置为800x600。任何人都知道如何使散射停止自动调整其窗口的bbox?
我找不到你的问题的答案,但我看到了别的东西。只有当按钮处于可查看屏幕内时,按钮才可点击,而外部按钮不可点击。为了解决这个问题,在Scatter参数中加入'do_collide_after_children = True',所有的按钮都会变成可点击的。另外我看到的是,Scatter区域位于Button区域。我不知道这是有意的还是你想要这些区域匹配。 –
这实际上非常有帮助。这将问题缩小到分散的边界框。我发现在创建窗口后,分散边界框的大小将调整为窗口的大小。即如果我在__init__期间打印边界框,它显示为它应该是的大小,但是如果我在按下按钮时打印它,它会小得多。 –