当我使用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