當我使用kivy構建應用程序時,我可以將所需的所有東西都放到需要的位置,但是當我將屏幕從縱向旋轉到橫向時,我的小部件開始相互碰撞。什麼是防止這種情況發生的好方法?使用python/kivy處理窗口小部件放置以解釋屏幕旋轉的好方法是什麼?
在附加的例子中,我能夠將設置按鈕的位置綁定到我的標題標籤小部件,但是我沒有成功讓我的scrollview綁定到它,所以當它旋轉時它保持X空間距離標籤的底部。
的Python:
class First_Screen(Screen):
def __init__(self, **kwargs):
super(First_Screen, self).__init__(**kwargs)
list_of_buttons = [
'button1',
'button2',
'button3',
'button4',
'button5',
'button6 ',
'button7',
'button8',
]
class My_Grid(FloatLayout, ScrollView):
grid = ObjectProperty(None)
def on_grid(self, *args):
for btn in list_of_buttons:
btn = Button(
text = btn,
)
btn.bind(on_press= First_Screen.print_message)
self.grid.add_widget(btn)
def print_message(self):
print ('Congratulations! You have clicked a button!')
class ScreenManagement(ScreenManager):
pass
class Stack_Overflow(App):
def build(self):
sm = ScreenManager(transition = FadeTransition())
sc0 = First_Screen(name = 'first_screen')
sm.add_widget(sc0)
return sm
if __name__ == '__main__':
Stack_Overflow().run()
KV:
ScreenManagement:
First_Screen:
<[email protected]+Image>:
<First_Screen>:
name: 'first_screen'
Label:
id: header
text: 'header'
pos_hint: ({'left' : 1, 'top' : 1})
size_hint: (1,None)
height: dp(50)
canvas.before:
Color:
rgba: (.6, .6, .6, 1)
Rectangle:
pos: self.pos
size: self.size
ScrollView:
size_hint: (1,.8)
pos_hint: ({'center_x' : .5, 'center_y' : .5})
My_Grid:
grid: grid
GridLayout:
id: grid
cols: 1
size_hint_y: None
row_default_height: "40dp"
height: self.minimum_height
ImageButton:
id: settings
size_hint: None, None
height: dp(30)
width: dp(30)
pos: header.x, header.y + 10
pos_hint: {'right': 1}
source: 'settings_black.png'
謝謝!
我的設置按鈕實際上是按照我想要的方式工作的。我把它設置成這樣,所以當我旋轉手機時,它仍然居中在標題標籤的中間。我的主要問題是我無法弄清楚如何讓我的scrollview小部件在我的標題標籤下方開始一定數量的像素,而當旋轉手機時它會與標題標籤相沖突,而設置按鈕恰好停留在它的位置應該。我嘗試使用header.x和header.y來設置我的scrollview的位置,但是這似乎沒有工作,並且我發佈的示例是最接近的我可以做的 – Indeciski
@Indeciski ping – KeyWeeUsr
放入BoxLayout似乎工作正常好。至於使用FloatLayout,我注意到,如果你創建一個按鈕,然後旋轉手機,它往往會擠壓,看起來尷尬。這是通過使用RelativeLayout來解決的,它說它像FloatLayout一樣起作用,除了它的子部件相對於佈局定位,或者你可以指向我應該查看的文檔,所以我可以檢查它作爲替代方案看看哪個更適合我? 無論如何,非常感謝您的幫助和詳細解釋! – Indeciski