2017-09-15 67 views
0

我遇到了一个奇怪的问题。每当我调整窗口大小时,底部BoxLayout中的按钮(提交和取消)从屏幕中心一直移动到左侧。但是,如果我调整窗口大小,然后通过屏幕管理器返回屏幕,它们又回到了中心位置。任何建议或有更好的方法来居中?Kivy有关在调整窗口大小时从中心移动的按钮

编辑:这是我的应用程序在启动时的截图:https://i.imgur.com/wkqx3tN.png

AnchorLayout: 
    size_hint_y: None 
    height: max(root.height, content.height) 
    GridLayout: 
     id: content 
     cols: 1 
     spacing: '8dp' 
     padding: '8dp' 
     size_hint: (.8, None) 
     height: self.minimum_height 
     BoxLayout: 
      size_hint_y: None 
      height: '48dp' 
      TextInput: 
       id: textField 
       multiline: False 
     BoxLayout: 
      size_hint_y: None 
      height: '48dp' 
      ProgressBar: 
       id: downloadBar 
       max: 1 
       value: 0 
     BoxLayout: 
      size_hint: None, None 
      height: '48dp' 
      width: '150dp' 
      center_x: root.center_x 
      Button: 
       text: "Submit" 
       on_press: 
        TextScreen.download_file(textField.text) 

      Button: 
       text: "Cancel" 
       on_press: 
        root.manager.transition.direction = 'left' 
        root.manager.transition.duration = 1 
        root.manager.current = 'Get_Vod' 
+0

当我跑到你的代码(这是),按钮(提交和取消)初步显现左边。调整大小后,它们仍然出现在左侧。您可以在启动时分享您的应用程序的打印屏幕吗? – ikolim

+0

@ikolim https://i.imgur.com/wkqx3tN.png 你知道一个不同的方式可以居中这些按钮吗? –

+0

根据kivy-examples/widgets/boxlayout_poshint.py中的实例。您必须执行以下操作:(1)将GridLayout替换为BoxLayout,(2)删除“cols:1”,(3)将“center_x:root.center_x”替换为“pos_hint:{'center_x':.5}” – ikolim

回答

0

您描述的效果对我来说有点意外,但是您尝试的方式将无法正常工作,因为它不能很好地与GridLayout的布局代码集成。

你可能想使用pos_hint居中BoxLayout的,但这不会直接在网格布局,如果你可以工作,让你有选择,要么转换你GridLayout(一个山坳)成垂直BoxLayout,或如果出于某种原因不这样做,请将当前的BoxLayout换成另一个,这样会将size_hint_x设置为1,以便它可以正确对准其子女。

切换到的BoxLayout

AnchorLayout: 
    size_hint_y: None 
    height: max(root.height, content.height) 
    BoxLayout: 
     id: content 
     orientation: 'vertical' 
     spacing: '8dp' 
     padding: '8dp' 
     size_hint: (.8, None) 
     height: self.minimum_height 
     BoxLayout: 
      size_hint_y: None 
      height: '48dp' 
      TextInput: 
       id: textField 
       multiline: False 
     BoxLayout: 
      size_hint_y: None 
      height: '48dp' 
      ProgressBar: 
       id: downloadBar 
       max: 1 
       value: 0 
     BoxLayout: 
      size_hint: None, None 
      height: '48dp' 
      width: '150dp' 
      pos_hint: {'center_x': .5} 
      Button: 
       text: "Submit" 
       on_press: 
        TextScreen.download_file(textField.text) 

      Button: 
       text: "Cancel" 
       on_press: 
        root.manager.transition.direction = 'left' 
        root.manager.transition.duration = 1 
        root.manager.current = 'Get_Vod' 

包装用的BoxLayout

AnchorLayout: 
    size_hint_y: None 
    height: max(root.height, content.height) 
    GridLayout: 
     id: content 
     cols: 1 
     spacing: '8dp' 
     padding: '8dp' 
     size_hint: (.8, None) 
     height: self.minimum_height 
     BoxLayout: 
      size_hint_y: None 
      height: '48dp' 
      TextInput: 
       id: textField 
       multiline: False 
     BoxLayout: 
      size_hint_y: None 
      height: '48dp' 
      ProgressBar: 
       id: downloadBar 
       max: 1 
       value: 0 
     BoxLayout: 
      size_hint_y: None 
      height: '48dp' 
      BoxLayout: 
       size_hint_x: None 
       width: '150dp' 
       pos_hint: {'center_x': .5} 
       Button: 
        text: "Submit" 
        on_press: 
         TextScreen.download_file(textField.text) 

       Button: 
        text: "Cancel" 
        on_press: 
         root.manager.transition.direction = 'left' 
         root.manager.transition.duration = 1 
         root.manager.current = 'Get_Vod' 
0

以及我无法评论,因为我是一个新用户,所以如果没有工作,请不要downvote。我想说的是,您使用的高度和宽度为dp,并且dp不用于通过更改屏幕大小来调整本身,您应该使用屏幕比例系统,例如size_hint: .25,.48。或pos_hint固定位置 希望它会有所帮助。

相关问题