Всем привет, кто-нибудь может мне помочь, я хочу прочитать текстовый файл в kivy textinput или label

#python #kivy #kivy-language

#python #kivy #kivy-язык

Вопрос:

импорт:

 from kivy.app import App
from kivy.lang import Builder
from kivy.properties import StringProperty
from kivy.uix.textinput import TextInput
 
 kv = '''
BoxLayout:
    orientation: 'vertical'
    text: newList
    TextInput:
        id: newList
    Button:
        text: 'click'
        on_press: app.clicked()

'''

 

MyApp класс:

 class MyApp(App):
    text = StringProperty('read.text')

    def build(self):
        return Builder.load_string(kv)

    def clicked(self):
        file = open('read.text', 'r')
        f = file.readlines()
        newList = []
        for line in f:
            newList.append(line.strip())
        print(newList)
        self.root.ids.your_textinput.text = (newList)


if __name__ == '__main__':
    MyApp().run()
 

Это сообщение появляется, когда я нажимаю run (AttributeError: объект ‘list’ не имеет атрибута).

Комментарии:

1. вы пробовали устанавливать строку вместо списка? self.root.ids.your_textinput.text = ‘n’.join(новый список)

Ответ №1:

Прежде всего, вы открываете файл с именем read.text , которого не существует. Текстовые файлы имеют расширение .txt . Поскольку такой файл не существует, файл не открывается, и поэтому в список ничего не добавляется newList . Итак, все, что вам нужно сделать, это изменить .text на .txt второе, это то, что вы присвоили своему полю textinput тот же идентификатор, что и список, что может вызвать ошибку позже. Также при выполнении self.root.ids.your_textinput.text = (newList) вы предоставляете список вместо текста, что также приведет к ошибке. Итак, ваш окончательный код будет:

 from kivy.app import App
from kivy.lang import Builder
from kivy.properties import StringProperty
from kivy.uix.textinput import TextInput

kv = '''
BoxLayout:
    orientation: 'vertical'
    TextInput:
        id: text_field
    Button:
        text: 'click'
        on_press: app.clicked()

'''

class MyApp(App):
    text = StringProperty('read.txt')

    def build(self):
        return Builder.load_string(kv)

    def clicked(self):
        file = open('read.txt', 'r')
        f = file.readlines()
        self.root.ids.text_field.text = (''.join(f))


if __name__ == '__main__':
    MyApp().run()
 

Комментарии:

1. Откуда вы знаете правильное имя файла OP?

2. Он использует ‘read.text’ в своем коде, но текстовые файлы имеют расширение ‘.txt’, а не ‘.text’

3. Вполне возможно, что файл имеет расширение .text . Если бы OP пытался прочитать файл, который не существует, они бы получили FileNotFoundError .

4. В его коде были и другие ошибки. Я перечислил их все и, исправив их все, также опубликовал окончательный код