#python #kivy
#python #kivy
Вопрос:
У меня есть BoxLayout внутри TabbedPannel с «фиксированным размером высоты», и я хочу, чтобы он «привязывался» вверху, поэтому, когда я изменяю размер высоты графического интерфейса, он следует за верхней частью и открытым пространством внизу.
Я перепробовал много способов сделать это, например, pos_hint, AnchorLayout, поместив виджет внизу всего, но я не смог заставить его работать.
Итак, вот код.
Exemple.py
from kivy.app import App
from kivy.uix.label import Label
from kivy.uix.gridlayout import GridLayout
from kivy.uix.textinput import TextInput
from kivy.uix.button import Button
from kivy.uix.widget import Widget
from kivy.properties import ObjectProperty
class TabMain(Widget):
def __init__(self, *args):
super(TabMain, self).__init__(*args)
self.ids["panel"]._tab_layout.padding = '-2dp', '-2dp', '-2dp', '-2dp'
class GuiApp(App):
def build(self):
return TabMain()
if __name__ == '__main__':
GuiApp().run()
gui.kv
<TabMain>
TabbedPanel:
id: panel
size: root.width, root.height
do_default_tab: False
tab_pos: 'bottom_mid'
tab_width: self.size[0] / 1
canvas:
Rectangle:
size: self.size
TabbedPanelItem:
text: "Robos"
background_color: (48/255, 48/255, 48/255, 1) if self.state == 'down' else (88/255, 88/255, 88/255, 1)
background_down: ""
background_normal: ""
TabbedPanel:
do_default_tab: False
tab_width: 115
TabbedPanelItem:
text: "Solicitar"
TabbedPanel:
tab_pos: 'bottom_right'
do_default_tab: False
TabbedPanelItem:
text: "Solicitar"
AnchorLayout:
anchor_y: 'top'
BoxLayout:
orientation: "vertical"
spacing: 4
padding: 4
pos_hint: {'y': 1}
BoxLayout:
size_hint: 1, None
height: 30
Label:
text: "Login"
halign: "right"
TextInput:
multiline: False
size_hint: 1.7 , 1
Label:
text: "Senha"
TextInput:
multiline: False
size_hint: 1.7, 1
BoxLayout:
size_hint: 1, None
height: 30
Label:
text: "Data Inicial"
TextInput:
multiline: False
size_hint: 1.7, 1
Label:
text: "Data Final"
TextInput:
multiline: False
size_hint: 1.7, 1
BoxLayout:
size_hint: 1, None
height: 45
Label:
text: "Lembrar informações dadas pelo usuario"
size_hint: None, 1
width: 350
CheckBox:
size_hint: 0.3, 1
Label:
size_hint: 1.4, 1
Button:
text: "Iniciar"
size_hint: 2, 0.90
BoxLayout:
size_hint: 1, None
height:60
orientation: "vertical"
spacing: 0
BoxLayout:
size_hint: 1, None
height: 30
ProgressBar:
value: 25
Label:
size_hint: 0.1, 1
text: "25.0%"
BoxLayout:
valign: "top"
size_hint: 1, None
height: 30
Label:
size_hint: None, None
text: "Alguma informação"
size: self.texture_size
Label:
Label:
size_hint: None, None
text: "Parado"
size: self.texture_size
Label:
size_hint: 0.1, 1
BoxLayout:
size_hint: 1, None
height: 15
TabbedPanelItem:
text: "Relatorio"
Label:
text: "Banco de Dados"
Ответ №1:
BoxLayout
Пытается использовать все пространство, которое ему было предоставлено, поэтому в итоге получается пустое пространство, которое отображается в верхней части BoxLayout
. Чтобы исправить это, вы можете использовать minimum_height
:
AnchorLayout:
anchor_y: 'top'
BoxLayout:
orientation: "vertical"
spacing: 4
padding: 4
pos_hint: {'y': 1}
size_hint: 1, None
height: self.minimum_height