[英]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.