Как перемещать текст вверх по экрану при каждом нажатии кнопки - PullRequest
1 голос
/ 16 апреля 2019

Я хочу разработать приложение для чата для Android.Он будет получать сообщения от контроллера на сайте.Для этого я начал разработку графического интерфейса.После практики и изучения нескольких кодов я смог создать текстовое поле, кнопку и ярлык.При нажатии кнопки текст в текстовом поле отображается на ярлыке с именем «Отображать», а текстовое поле очищается.Однако теперь я хочу, чтобы при каждом нажатии кнопки текст должен перемещаться вверх, а его пространство должно заменяться текстом в текстовом поле.Аналогичным образом текст от отправителя должен отображаться справа, а полученный текст должен отображаться в левой части экрана.Это может быть глупый вопрос, но, поскольку я совершенно новичок в питоне и киви, мне становится трудно после попытки в течение более недели.Пожалуйста, объясните мне это.Ниже приведен код.Это main.py

import kivy
from kivy.app import App
from kivy.uix.button import Button
from kivy.uix.gridlayout import GridLayout
from kivy.uix.floatlayout import FloatLayout
from kivy.properties import StringProperty
from kivy.uix.scrollview import ScrollView

class scrollableLabel(FloatLayout):
    def display_txt(self):
        self.ids.lbl.text = self.ids.txt.text
        self.ids.txt.text = ''

class MyApp(App):
    def build(self):
        return scrollableLabel()

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

Это файл kivy

<scrollableLabel>:
    FloatLayout:
    cols : 1
    rows : 3
    Button:
        text : 'Send'
        size_hint : .2 , .1
        pos : 640 , 0
        on_press : root.display_txt()

    TextInput:
        hint_text : 'Write here'
        id : txt
        size_hint : .8 , .1
        pos : 0 ,0

    Label :
        id : lbl
        text : 'Display'
        size_hint : .5 , .4
        pos : 500 , 100
        text_size : self.size

Ответы [ 2 ]

2 голосов
/ 16 апреля 2019

Чат приложение - предложение

Kivy Label »Выравнивание и перенос текста

  • Объявите пользовательский виджет с наследованием виджета Label, чтобы вы могли управлять выравниванием текста, т.е. слева для отправленного текста и справа для полученного текста.

Фрагменты - файл kv

<CustomLabel@Label>:
    size_hint_y: None
    text_size: self.width, None
    height: self.texture_size[1]
    halign: 'left'
    valign: 'middle'

Kivy RecycleView

  • Заменить Label: на RecycleView:
  • Используйте CustomLabel как viewclass
  • Добавление отправленного или полученного текста в RecycleView data

Фрагменты - файл kv

RecycleView:
    id: rv
    viewclass: 'CustomLabel'

    RecycleBoxLayout:
        default_size_hint: 1, None
        orientation: 'vertical'

Kivy RecycleView »data

Представление генерируется путем обработки данных, по существу, списка dicts и использует эти dicts для генерации экземпляров класса просмотра как требуется.

data

Данные, используемые текущим представлением адаптера. Это список диктов чьи ключи отображаются на соответствующие имена свойств viewclass .

data - это AliasProperty , который получает и устанавливает данные, используемые для генерировать представления.

Snippets - Py file

    def display_txt(self):
        self.ids.rv.data.append({'text': self.ids.txt.text, 'halign': 'left'})
        self.ids.txt.text = ''

Пример * 1 057 * main.py from kivy.app import App from kivy.uix.screenmanager import Screen from kivy.lang import Builder class SMS(Screen): def send_txt(self): self.ids.rv.data.append({'text': self.ids.txt.text, 'halign': 'left'}) self.ids.txt.text = '' def receive_txt(self): self.ids.rv.data.append({'text': self.ids.txt.text, 'halign': 'right'}) self.ids.txt.text = '' Builder.load_file("main.kv") class MyApp(App): def build(self): return SMS() if __name__ == "__main__": MyApp().run() main.kv <ChatBox@Label>: size_hint_y: None text_size: self.width, None height: self.texture_size[1] halign: 'left' valign: 'middle' <SMS>: GridLayout: cols : 1 BoxLayout: size_hint: 1, 0.1 Button: text : 'Send' on_press : root.send_txt() Button: text : 'Receive' on_press : root.receive_txt() TextInput: hint_text : 'Write here' id : txt size_hint : .8 , .1 pos : 0 ,0 RecycleView: id: rv viewclass: 'ChatBox' RecycleBoxLayout: default_size_hint: 1, None orientation: 'vertical' выход

Result

0 голосов
/ 23 апреля 2019

Я попытался немного изменить внешний вид.Я хотел отправить, получить кнопку и текстовый ввод внизу и метку сверху.И обнаружил, что текст начинает отображаться с некоторой высоты над полем ввода текста и кнопками.Мне нужно, чтобы он сразу отображался прямо над кнопками и полем ввода текста.А в моем коде текст для кнопок отправки и получения отображается слева.Скажите, пожалуйста, почему это так.
Вот файл .kv
: size_hint_x: нет size_hint_y: нет pos: 0,0 text_size: self.width, None height: self.texture_size [1] halign: 'left 'valign:' middle '

     <CustomButton@Button>:
          font_size : 25
          size_hint : 0.1,0.1

     <MyWidget>:
          GridLayout:
              #size : root.width, root.height
              #orientation : 'horizontal'
              #pos:100,100
              cols:1
              row:3

              RecycleView:
                  id: rv
                  viewclass: 'ChatBox'

                  RecycleBoxLayout:
                      default_size_hint: 1, None
                      orientation: 'vertical'

              BoxLayout:
                  TextInput:
                      hint_text: 'type here'
                      id : txt
                      multiline : True
                      size_hint : .5,.1
                      #pos : 0,0
                  CustomButton:
                      text: 'Receive'
                      on_press : root.send_txt()
                      #pos : 10,0
                  CustomButton:
                      text: 'Send'
                      on_press : root.send_txt()
                      #pos : 20,0    

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...