Kivy散射区域仅限于窗口大小

2024-09-26 22:42:49 发布

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

我基本上遇到的问题是,唯一的“可抓取”分散区域完全由我正在查看程序的窗口大小定义,而不是散射的大小。在

下面是该bug的一个有效示例:

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的任何内容。如果我调整我的屏幕,我可以抓到更远一点。如果我把屏幕变小,可抓取的区域会缩小,甚至可能无法到达。我到底该怎么解决这个问题?在

我正在使用Kivy环境和Android模拟器,所以我有一个相当大的屏幕。不幸的是,如果我把这个移到手机上,屏幕大小会明显缩小,使这个错误有效地禁用滚动。在

(顶层布局用于添加菜单。本例不包括实际菜单,因为不需要重新创建错误)

我想弄清楚的主要是:

  1. 这是代码的问题还是android模拟器的问题?在
  2. 如果这是代码的问题,可以解决吗?如何解决?在
  3. 如果无法修复,我如何才能获得此功能?在

更新: 在George Bou的评论之后,我将问题隔离到了分散的BBOX中。创建时,散点bbox的大小为2000x200。但是,在创建窗口之后,它是800x600(弹出屏幕的默认大小)。在

令人恼火的是,我不知道怎么解决这个问题。如果我在任何一点(例如,在按钮中)更改散点的宽度/高度,每当发生平移/缩放时,它会立即重置回800x600。有人知道如何让分散停止自动调整其bbox到窗口的大小吗?在


Tags: fromimportselfadd屏幕widget按钮do
2条回答

好吧。我想不出一种方法来处理香草散点对象本身,但我做了一个工作似乎足够好的解决方法。在

基本上,scatter控制通过其类中的collide_point方法获取的内容。这个类引用它自己的宽度/高度(这是令人恼火的不变的)。因此,我创建了一个自定义散点类,用可更改的东西覆盖collide_point方法。在

class CustScatter(Scatter):
    def collide_point(self, x, y):
        x, y = self.to_local(x, y)
        return 0 <= x <= self.xboundval and 0 <= y <= self.yboundval
    def custSetBounds(self,xval,yval):
        self.xboundval=xval
        self.yboundval=yval

要使用它,我只需确保在创建类的实例之后立即设置边界(custSetBounds)。在

基维真的让我想念金特。。。在

我自己也碰到过。添加size_hint=(None,None)以阻止它使用windows维度。在

相关问题 更多 >

    热门问题