簡體   English   中英

Kivy python Gridlayout 布局大小/調整大小問題

[英]Kivy python Gridlayout Layout Size / Resizing issue

嘿,我的 Gridlayout 出現問題,不想調整到全屏:這里的紅線顯示 kivy 認為 window 停止的位置。

我的想法:

我制作了一個 1 Column 作為基本布局的 Gridlayout,我添加了所有內容。 然后我將頂部欄(帶有 3 列/按鈕的網格布局)添加到基礎層。 然后我創建了一個可滾動的空間,我也將它添加到基礎層,以便頂部的頂部欄始終保持在屏幕上並且不會隨着滾動而移動。

但出於某種原因,我猜我的基礎層不會擴展/占用應用程序內的所有空間。

這也是我正在使用的 PNG 文件,無論使用什么 png 來測試測試 PNG,如下所示

紅線表示截止點

from kivy.app import App
from kivy.uix.image import Image
from kivy.uix.label import Label
from kivy.uix.gridlayout import GridLayout
from kivy.uix.button import Button
from kivy.uix.screenmanager import ScreenManager, Screen
from kivy.core.window import Window
from kivy.uix.scrollview import ScrollView
from kivy.uix.boxlayout import BoxLayout
import pandas as pd
     
class InfoPage(GridLayout):
    def __init__(self, **kwargs):
        super().__init__(**kwargs)
        self.cols = 1
        self.size_hint = (0.9,0.9)
        self.pos_hint = {"center_x": 0.5, "center_y":0.5}
        self.spacing = 10
        self.bind(minimum_height = self.setter('height'))
        
    #Base Layout
        self.base_layout = GridLayout(size_hint=(1,None), cols=1, spacing=20)
        self.base_layout.bind(minimum_height=self.base_layout.setter('height'))
        
#Top Bar with Buttons "1", "2" & "3"
        self.top_bar_layout = BoxLayout(orientation="horizontal", size_hint=(1, .1), spacing=10)
        self.back_to_mainpage = (Button(text= "Back to MainPage",
                                size_hint = (1,0.2),
                                bold = True,
                                background_color = '#00FFCE',
                             ))
        
        self.top_bar_layout.add_widget(self.back_to_mainpage)
        self.top_bar_layout.add_widget(Button(text= "Button 2",
                             size_hint = (1,0.2),
                             bold = True,
                             background_color = '#00FFCE'))
        self.top_bar_layout.add_widget(Button(text= "Button 3",
                             size_hint = (1,0.2),
                             bold = True,
                             background_color = '#00FFCE'))

#Scroll View Base Layout
        self.scroll_view_base_layout = GridLayout(cols=1, size_hint_y=None)
        self.scroll_view_base_layout.bind(minimum_height = self.scroll_view_base_layout.setter('height'))

#Scrollable Content

    #Label Grid
        self.content_scroll_view_top_label = GridLayout(size_hint_y = None, row_default_height=80, cols=2)
        self.content_scroll_view_top_label.bind(minimum_height=self.content_scroll_view_top_label.setter('height'))
        
        self.content_scroll_view_top_label.add_widget(Label( 
                text= "Avalanche \n \n Profile:",
                font_size = 20,
                color='00FFCE',
                size_hint = (0.5,1),
                halign="center",
                valign="middle",
                ))
        self.content_scroll_view_top_label.add_widget(Label( 
                text= "Weather \n \n Data (Past):",
                font_size = 20,
                color='00FFCE',
                size_hint = (0.5,1),
                halign="center",
                valign="middle",
                ))
        
    #Png Grid
        self.content_scroll_view_top_png = GridLayout(size_hint_y=None, row_default_height=1000, cols=2)
        self.content_scroll_view_top_png.bind(minimum_height=self.content_scroll_view_top_png.setter('height'))
        
        self.content_scroll_view_top_png.add_widget(Image(source="Data_files\Changing_Data\Outputs\snowprofile_15444-1.png"))
        self.content_scroll_view_top_png.add_widget(Image(source="Data_files\Changing_Data\Outputs\Arlingsattel.png"))

    #Weather Data Grid
        self.weather_data_grid = GridLayout(size_hint=(1,None), size=(Window.width, Window.height), row_default_height=15, cols=16)
        #Heading row description
        self.weather_data_grid.add_widget(Label(text='Clouds'))
        self.weather_data_grid.add_widget(Label(text='Cloud Cover Type'))
        self.weather_data_grid.add_widget(Label(text='Icons'))
        self.weather_data_grid.add_widget(Label(text='Precipication %'))
        self.weather_data_grid.add_widget(Label(text='Time'))
        self.weather_data_grid.add_widget(Label(text='Temperature'))
        self.weather_data_grid.add_widget(Label(text='Fells like Temperature'))
        self.weather_data_grid.add_widget(Label(text='Air Pressure'))
        self.weather_data_grid.add_widget(Label(text='Humidity'))
        self.weather_data_grid.add_widget(Label(text='Dew Point'))
        self.weather_data_grid.add_widget(Label(text='UV Index'))
        self.weather_data_grid.add_widget(Label(text='Cloud Coverage %'))
        self.weather_data_grid.add_widget(Label(text='Visibility'))
        self.weather_data_grid.add_widget(Label(text='Wind Speed'))
        self.weather_data_grid.add_widget(Label(text='Wind Direction'))
        self.weather_data_grid.add_widget(Label(text='Wind Gusts'))
        #Row 1
        self.weather_data_grid.add_widget(Label(text='test'))
        self.weather_data_grid.add_widget(Label(text='test'))
        self.weather_data_grid.add_widget(Label(text='test'))
        self.weather_data_grid.add_widget(Label(text='test'))
        self.weather_data_grid.add_widget(Label(text='test'))
        self.weather_data_grid.add_widget(Label(text='test'))
        self.weather_data_grid.add_widget(Label(text='test'))
        self.weather_data_grid.add_widget(Label(text='test'))
        self.weather_data_grid.add_widget(Label(text='test'))
        self.weather_data_grid.add_widget(Label(text='test'))
        self.weather_data_grid.add_widget(Label(text='test'))
        self.weather_data_grid.add_widget(Label(text='test'))
        self.weather_data_grid.add_widget(Label(text='test'))
        self.weather_data_grid.add_widget(Label(text='test'))
        self.weather_data_grid.add_widget(Label(text='test'))
        self.weather_data_grid.add_widget(Label(text='test'))
  

#Add Content to Scrollable space
        self.scroll_view_base_layout.add_widget(self.content_scroll_view_top_label)
        self.scroll_view_base_layout.add_widget(self.content_scroll_view_top_png)
        self.scroll_view_base_layout.add_widget(self.weather_data_grid)

#Create scrollview
        self.scrollview = ScrollView(size_hint=(1, None), size=(Window.width, Window.height))
        #add layout to scrollview
        self.scrollview.add_widget(self.scroll_view_base_layout)
    
#Add Widgets to Base Layout
        self.base_layout.add_widget(self.top_bar_layout)
        self.base_layout.add_widget(self.scrollview)      

#Add Base Layout to Window
        self.add_widget(self.base_layout)
        

class SkitouringApp(App):
    def build(self):
        self.screen_manager = ScreenManager()
        
        self.info_page = InfoPage()
        screen = Screen(name="Info")
        screen.add_widget(self.info_page)
        self.screen_manager.add_widget(screen)
        
        return self.screen_manager
    
if __name__ == "__main__":
    Skitour_app = SkitouringApp()
    Skitour_app.run()
    

編輯


它甚至可能與它有關,認為在網格布局內放置了另一個元素。 當在下面添加更多 pdf 時,如下一行所示,它完美地從顯示的紅線開始。 我瞎了嗎?

好吧,我通過從以下位置刪除 Scrollview 中的輸入來修復它:

self.scrollview = ScrollView(size_hint=(1, None), size=(Window.width, Window.height))

self.scrollview = ScrollView()

並通過改變:

self.base_layout.add_widget(self.top_bar_layout)
self.base_layout.add_widget(self.scrollview)  

到以下內容並通常刪除基本布局:

 self.add_widget(self.top_bar_layout)
 self.add_widget(self.scrollview)  

我不知道為什么會這樣,但它確實如此,我會接受它....

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM