2016-09-20 3 views
0

기본적으로 프로그램을 보는 창의 크기에 의해 전체적으로 정의되는 "grabbable"분산 영역과 관련된 문제는 발생하지만 분산 영역의 크기는 아닙니다. 내가 오른쪽으로 이동 분산을 사용하는 경우, (버튼으로 증가) ~ (10), 난 아무것도 과거의 버튼을 잡을 수없는 내 화면에서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() 

: 여기

는 작업 버그의 예입니다 -11. 화면의 크기를 조정하면 조금 더 멀어 질 수 있습니다. 화면을 작게 만들면 grabbable 영역이 축소되어 도달 할 수 없을 수도 있습니다. 어떻게 해결할 수 있습니까?

저는 Kivy 환경을 Android 에뮬레이터와 함께 사용하기 때문에 꽤 큰 화면이 있습니다. 불행히도 이것을 휴대 전화로 옮기면 화면 크기가 크게 줄어들어이 버그로 인해 스크롤이 효과적으로 비활성화됩니다.

합니다 (최상위 레이아웃은 메뉴를 추가하는 것입니다이 버그를 다시 만들 필요가 없습니다으로 실제 메뉴가이 예제에 포함되지 않습니다.) 내가 알아 내기 위해 노력하고있어 주요 것들이 있습니다

을 :

  1. 코드 또는 Android 에뮬레이터에 문제가 있습니까?
  2. 코드에 문제가있는 경우 해결할 수 있습니까?
  3. 해결할 수없는 경우 어떻게하면이 기능을 사용할 수 있습니까?

업데이트 : 조지 보우 (George Bou)의 의견을 듣고 나서, 나는이 문제가 산산조각의 BBOX 내에있는 것으로 확인했습니다. 생성시 스 캐터 bbox 크기는 2000x200입니다. 그러나 창을 만든 후에는 800x600 (팝업되는 화면의 기본 크기)입니다.

annoyingly, 나는 이것을 고치는 방법을 생각할 수 없다. 어느 지점 (예 : 버튼)에서 팔레트의 너비/높이를 변경하면 변환/확대/축소가 발생할 때마다 즉시 800x600으로 다시 설정됩니다. 누구든지 창에 bbox의 크기를 자동으로 조절하는 방법을 알고 있습니까?

+0

문제에 대한 답변을 찾을 수 없지만 다른 것을 보았습니다. 버튼은 볼 수있는 화면 내에있을 때만 클릭 할 수 있고 외부에있는 버튼은 클릭 할 수 없습니다. 이를 해결하기 위해서는 Scatter 매개 변수에'do_collide_after_children = True'를 추가하면 모든 버튼을 클릭 할 수있게됩니다.또한 내가 본 것은 Scatter 영역이 Button 영역 위에 있다는 것입니다. 그게 의도 된 것인지 또는 그 지역이 일치하기를 원하는지 나는 모른다. –

+0

그것은 실제로 매우 도움이됩니다. 그것은 산산조각의 테두리 상자로 문제를 좁혔습니다. 나는 윈도우가 생성 된 후에 윈도우의 크기에 맞게 산포의 바운딩 박스 크기가 조정된다는 것을 발견했다. 즉, __init__ 중에 테두리 상자를 인쇄하면 크기로 표시되지만 버튼 인쇄시 인쇄하면 훨씬 작아집니다. –

답변

1

확인. 바닐라 스 캐터 개체 자체로이 작업을 수행하는 방법을 알 수는 없었지만 충분히 잘 작동하는 해결 방법을 만들었습니다.

기본적으로 스 캐터는 해당 클래스에서 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)를 설정해야합니다. Kivy 정말 날 Tkinter를 그리워하게

...

1

나는 나 자신이 다 퉜다. size_hint = (없음, 없음)을 추가하여 창 크기를 사용하지 못하도록합니다.

관련 문제