Показать список с Python и Kivy1.11 - PullRequest
0 голосов
/ 30 июня 2019

Я новичок в изучении Kivy, хочу создать приложение на Python и Kivy.

Я слежу за книгой "Создание приложений в Kivy: Mobile с Python". Однако версия Kivy, используемая в этой книге, - 1.8, слишком старая, чтобы правильно выполнить код.

Так что у меня проблемы с заменой ListView на RecycleView!


Это мой main.py

from kivy.app import App
from kivy.uix.boxlayout import BoxLayout
from kivy.properties import ObjectProperty
import requests
import json  

class WeatherApp(App):
    pass

class AddLocationForm(BoxLayout):

    search_input_property = ObjectProperty()

    def search_location(self):
        location_string = self.search_input_property.text
        # print(location_string)
        API_key = 
        url = "http://api.openweathermap.org/data/2.5/weather?q={}&APPID={}".format(location_string,API_key)
        res=requests.get(url)
        # print(response.text)
        json_data = json.loads(res.text)
        self.retrieve_data(json_data)

    def retrieve_data(self,data):
        weather_type = str(data['weather'][0]['main'])
        weather_description = str(data['weather'][0]['description'])
        temperature = str(data['main']['temp']-273.15) + " °C"
        pressure = str(data['main']['temp']) + " hpa"
        humidity = str(data['main']['humidity']) + " %"

        data_list = [weather_type,weather_description,temperature,pressure,humidity]

    def find_location(self):
        pass

    def current_location(self):
        pass

if __name__ == "__main__":
    application = WeatherApp()
    application.run()

Это мой файл kv

AddLocationForm:

<AddLocationForm>:

    orientation: 'vertical'
    search_input_property:search_input_text

    BoxLayout:
        orientation: 'horizontal'
        height: "50dp"
        size_hint_y: None


        TextInput:
            id: search_input_text
            size_hint_x: 50
            multiline: False
            hint_text:"Please Input a Location"
            on_text_validate: root.search_location()

        Button:
            text: 'Search Location'
            size_hint_x: 25
            on_press:root.search_location()

        Button:
            text: 'Current Location'
            size_hint_x: 25

Я успешно получил данные о погоде из OpenWeatherMap и хочу отобразить информацию (weather_type, weather_description, температура, давление, влажность) в виде списка под BoxLayout (TextInput, кнопка, кнопка).

Как я могу сделать это в моем файле kv для достижения своей цели?

1 Ответ

0 голосов
/ 30 июня 2019

Для списка я использую GridLayout внутри ScrollView и добавляю его в виджет, где я хочу его показать.Например:

    layout1 = GridLayout(cols=1, spacing=0, size_hint=(1, None))
    layout1.bind(minimum_height=layout1.setter('height'))
    for i in items:
        b = ItemBtn(text=i["str"])
        layout1.add_widget(b)
    scrollview1 = ScrollView()
    scrollview1.add_widget(layout1)
    parent.add_widget(scrollview1)

В приведенном выше примере создается список кнопок, родительский элемент - это виджет, в который вы хотите поместить свой список.Не забудьте импортировать GridLayout и конец ScrollView следующим образом:

from kivy.uix.scrollview import ScrollView
from kivy.uix.gridlayout import GridLayout
...