Киви: Как я могу l oop просмотреть данные из текстового файла и вставить их в виде списка на моем экране в рамках собственной метки? - PullRequest
0 голосов
/ 02 апреля 2020

Я могу отображать текст из текстового файла в пользовательском интерфейсе, но я не знаю, как дать каждому фрагменту текста собственную метку, чтобы я мог равномерно распределить текст на экране.

The current result of my problem.

*. Py

#imported from kivy framework
from kivy.app import App
from kivymd.app import MDApp
from kivy.app import App
from kivy.uix.label import Label
from datetime import datetime
from datetime import timedelta
from kivy.clock import Clock
from kivy.lang import Builder
from kivy.uix.boxlayout import BoxLayout
from kivy.uix.gridlayout import GridLayout
from kivy.uix.floatlayout import FloatLayout
from kivy.uix.screenmanager import ScreenManager, Screen
from kivy.uix.image import Image
import dictionaryData
from kivy.lang import Builder
from kivy.base import runTouchApp
import os

class Main_Screen(Screen):
    pass


class Dictionary_Screen(Screen):
    def on_enter(self):
        self.Data()

    def Data(self):
        i = 0
        print("trigger")
        file1 = open('dict.txt','r')
        for lines in file1:
            i +=1
            fields = lines.split(',')
            print('I draw label')
            Data = (fields[0], fields[1])
            Title,Description = Data
            #   page is an object
            page = dictionaryData.Dictionary(Title,Description)
            page.formatData()
            work = page.placeholder()
            flipper = page.placeholder()
            self.add_widget(Label(text = flipper, pos=(i*00, 100)))
            self.ids["textFile"].text += flipper + '\n'

#class for all screens
class ScreenManagement(ScreenManager):
   pass

class MainApp(MDApp):
    pass
MainApp().run()

*. Кв

#:kivy 1.0
#:import hex kivy.utils.get_color_from_hex
#styles that will apply to all intences for each tag
<MDRaisedButton>:
    font_size:18
<Label>:
    color: 0,0,0,1
#declaring screen managers and printing them in this order
ScreenManagement:
    Main_Screen:
        name: "Main_Screen"
    Dictionary_Screen:
        name: "Dictionary_Screen"
<Main_Screen>:
    Button:
        text: "Dictionary"
        on_release:
            app.root.current = "Dictionary_Screen"
<Dictionary_Screen>:
    BoxLayout:
        orientation: 'vertical'
        spacing: 10
        padding: 50
        canvas.before:
            Color:
                rgba: hex('#000')
            Rectangle:
                size: self.size
                pos: self.pos
        pos_hint: {'center_x': 0.5, 'center_y': 0.5}
        size_hint: 0.5, 0.5
        GridLayout:
            rows: 3
            cols: 3
            padding: 10
            spacing: 10
            Label:
                id:textFile
                color: (1,0,1,1)

Данные из текстового файла проходит через класс, где он правильно отформатирован, и, как вы можете видеть по изображению, он выглядит хорошо на экране, но все упаковано вместе, а не разделено равномерно.

Фиолетовый текст - это просто мое жесткое кодирование текста с использованием метка в файле kv, но я планирую иметь более 50 строк, которые я хочу отобразить, и жесткое кодирование каждой из них не похоже на правильный путь go.

Есть ли способ, которым я ' Могу ли я дать каждому фрагменту текста свою собственную метку или что-то еще, как расправить текст, чтобы он отображался в виде списка на экране?

Ниже приведены данные на всякий случай для справки.

Класс модуль, который импортируется и обрабатывает текстовый файл


#   class
class Dictionary:
    #   Dunder init asigns values to varibles each time code is exacuted.
    def __init__(self,title,description):
        self.title = title
        self.description = description

    def formatData(self):
        print("Title: {} Description {}".format(self.title,self.description))

    def placeholder(self):
        return "Title: {} Description {}".format(self.title,self.description)

dict.txt

CPU,CPU_INFORMATION
RAM,RAM_INFORMATION
SOMETHING,SOMETHING_INFORMATION

1 Ответ

1 голос
/ 03 апреля 2020

Я думаю, что ваша проблема проста. Попробуйте изменить строку:

self.add_widget(Label(text = flipper, pos=(i*00, 100)))

на что-то вроде:

self.add_widget(Label(text = flipper, pos=(00, i*50)))

Или, если вы добавите id к вашему BoxLayout:

<Dictionary_Screen>:
    BoxLayout:
        id: box

Тогда вы можете использовать:

self.ids.box.add_widget(Label(text = flipper))
...