我基本上遇到了問題,只有「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__期間打印邊界框,它顯示爲它應該是的大小,但是如果我在按下按鈕時打印它,它會小得多。 –