2017-09-15 23 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固定位置 希望它會有所幫助。

相關問題