Kivy를 처음 접해서 gridLayout에 항목을 추가하는 문제에 봉착했습니다. 항목은 내 파이썬 클래스에서 만들어지며 내 kv 파일에서 내 gridlayout을 채우고 싶습니다. 작동하지만 라벨이 같은 위치에 추가됩니다 (즉, 라벨이 열에 없음 - 모두 하나의 셀에 있음). 나는 here에서 해결책을 시도했지만, 나는 아직도 잘못 알고있다.python 코드로 생성 된 위젯을 kv 파일에 추가하는 방법
KV 파일 :
#:kivy 1.9.1
<Connected>:
BoxLayout:
orientation: 'vertical'
Label:
text: 'main window'
font_size: 32
BoxLayout:
orientation: 'vertical'
Label:
text: 'Flights'
font_size: 32
BoxLayout:
orientation: 'horizontal'
Label:
text: 'From'
font_size: 32
Label:
text: 'To'
font_size: 32
Label:
text: 'Company'
font_size: 32
Label:
text: 'Date'
font_size: 32
ScrollView:
size_hint_y: None
height: '200dp'
GridLayout:
id: flights_table
col: 4
size_hint_y: None
spacing: '1dp'
Button:
text: "Buy a ticket"
font_size: 32
on_press: root.order_flight()
Button:
text: "Logout"
font_size: 24
on_press: root.disconnect()
파이썬 코드 :
# coding: utf-8
import json
import requests
from kivy.adapters.dictadapter import (
DictAdapter,
ListAdapter,
)
from kivy.properties import (
ListProperty,
ObjectProperty,
)
from kivy.uix.gridlayout import GridLayout
from kivy.uix.label import Label
from kivy.uix.screenmanager import (
Screen,
SlideTransition,
)
from kivy.uix.listview import ListItemButton
class Connected(Screen):
u"""Screen after login in."""
flights = ListProperty()
def on_pre_enter(self, *args):
u"""Method that loads before the screen is loaded."""
self.flights = self.get_flights()
for flight in self.flights:
for value in [flight.get('from_city'), flight.get('to_city'), flight.get('company'), flight.get('flight_date')]:
self.ids.flights_table.add_widget(Label(text=value))
def disconnect(self):
u"""Logout method."""
self.manager.transition = SlideTransition(direction="right")
self.manager.current = 'login'
self.manager.get_screen('login').resetForm()
def get_flights(self):
u"""Method that gets the flights from a rest api."""
response = requests.get('http://127.0.0.1:8000/flights/', params={'format': 'json'})
if response.status_code == 200:
data = None
try:
data = json.loads(response.content.decode('utf-8'))
except ValueError as err:
raise
return data
return list()