#widget #position #alignment #kivy-language #grid-layout
Вопрос:
Ниже приведена упрощенная версия приложения, которое я создаю. Проблема, с которой я сталкиваюсь, находится во второй колонке таблицы:
Я использую различные типы виджетов; Spinner, MDTextFieldRound,кнопка mdroundflat (для выбора даты и времени)
Виджеты не выравниваются в одной и той же начальной позиции внутри столбца, второй столбец
Я хочу, чтобы они выровнялись слева, как метки в первом столбце
Я также хотел бы, чтобы они были одинаковой ширины, независимо от того, какой это виджет.
size_hint_x или просто size_hint, похоже, не работает.
Есть какие-нибудь предложения относительно того, как я могу это решить?
Файл KV
Screen:
MDNavigationLayout:
ScreenManager:
id: screen_manager
size_hint: 1, 1
pos_hint: {"top": 1, "left": 1}
Event_Screen:
name: "eventscreen"
<Event_Screen>:
BoxLayout:
orientation: "vertical"
size_hint: (0.6,0.8)
pos_hint: {"center_x": 0.5, "center_y": 0.5}
canvas.before:
Color:
rgba:(30/255, 31/255, 30/255,1)
Rectangle:
size: self.size
pos: self.pos
padding: 19
spacing: 19
MDLabel:
id: Events_options
text: "Events"
font_size: 40
halign: 'center'
size_hint_y: None
height: self.texture_size[1]
ScrollView:
size_hint_y: 0.75
do_scroll_x: False
do_scroll_y: True
GridLayout:
cols: 2
padding: 10
spacing: 10
size_hint_y: None
height: self.minimum_height
pos_hint: {"center_x": 0.3, "center_y": 0.7}
row_force_default: True
row_default_height: 40
MDLabel:
id: Event_list
text: "Event List"
font_size: 14
halign: 'left'
size_hint_y: None
height: self.texture_size[1]
size_hint_x: None
width: 200
Spinner:
id: Event_list_spin_id
pos: self.parent.pos
size_hint: None, None
size: (220,30)
text: "Select"
halign: 'center'
background_normal: ''
background_color: (0,0,0,0)
canvas.before:
Color:
rgba:(125/255,185/255,219/255,1)
RoundedRectangle:
size: self.size
pos: self.pos
radius: [19]
values: ["Garden","Woodland","Forest"]
MDLabel:
id: Event_ref_id
text: "Event reference"
font_size: 14
halign: 'left'
size_hint_y: None
height: self.texture_size[1]
size_hint_x: None
width: 200
MDTextFieldRound:
id: Event_ref_textf
hint_text: "Event reference"
icon_right: "account"
size_hint_x: None
width: 200
font_size: 18
MDLabel:
id: Event_date_id
text: "Event date"
font_size: 14
halign: 'left'
size_hint_y: None
height: self.texture_size[1]
size_hint_x: None
width: 200
MDRoundFlatButton:
text: "Open Date Picker"
font_size: 12
on_release:
root.event_date_picker()
MDLabel:
id: Event_time_id
text: "Event Time"
font_size: 14
halign: 'left'
size_hint_y: None
height: self.texture_size[1]
size_hint_x: None
width: 200
MDRoundFlatButton:
text: "Open Time Picker"
font_size: 12
on_release:
root.show_event_time_picker()
MDLabel:
id: event_auth_id
text: "Event Authorization"
font_size: 14
halign: 'left'
size_hint_y: None
height: self.texture_size[1]
size_hint_x: None
width: 200
MDTextFieldRound:
id: event_auth_textf
hint_text: "Event Authorization"
icon_right: "account"
size_hint_x: None
width: 200
font_size: 14
Файл Python
from kivymd.app import MDApp
from kivy.uix.screenmanager import Screen,ScreenManager
from kivymd.uix.picker import MDDatePicker
from kivymd.uix.picker import MDTimePicker
from kivy.properties import ListProperty
from kivy.lang import Builder
class Event_Screen(Screen):
# Card Start Date
# click ok
def event_on_save(self,instance,value,date_range):
print("Event date: {0}".format(value))
# click cancel
def event_on_cancel(self,instance,value):
print("You cancelled event date")
# try also passing a value for variable to the on_save below
def event_date_picker(self):
date_dialog = MDDatePicker()
date_dialog.bind(on_save=self.event_on_save, on_cancel=self.event_on_cancel)
date_dialog.open()
# Get time
def event_get_time(self,instance,time):
print("Deposit time: {0}".format(time))
# Cancel
def event_time_cancel(self,instance,time):
print("You canceled the time picker")
def show_event_time_picker(self):
time_dialog = MDTimePicker()
time_dialog.bind(on_cancel=self.event_time_cancel,time = self.event_get_time)
time_dialog.open()
class GridLayoutAPP(MDApp):
def build(self):
self.title = "GridLayout"
self.theme_cls.theme_style = "Dark"
self.theme_cls.primary_palette = 'Green'
GridLayoutAPP().run()