Программа поиска продуктов Kivy - PullRequest
0 голосов
/ 30 января 2020
from kivy.app import App
from kivy.uix.label import Label
from kivy.uix.gridlayout import GridLayout
from kivy.uix.textinput import TextInput
from kivy.uix.button import Button
from kivy.uix.screenmanager import ScreenManager, Screen
import json
import re

class Grid(GridLayout):

def __init__(self, **kwargs):
    super(Grid, self).__init__(**kwargs)

    # Columns for the main view
    self.cols = 1


    # Start of the Inside
    self.inside = GridLayout()
    self.inside.rows = 3


    self.inside.add_widget(Label(text = 'Enter the Brand Name for its Products: '))
    self.brand_input = TextInput(multiline = False)
    self.inside.add_widget(self.brand_input)


    # Add the things in inside to the main
    self.add_widget(self.inside)


    self.submit = Button(text = 'Submit', font_size = 20)
    self.submit.bind(on_press = self.pressed)
    self.add_widget(self.submit)


def pressed(self, instance):
    # Pull the text inside the textInput
    brand_name = self.brand_input.text

    with open('mcg_app/brands.json', 'r') as f:
        brands_dict = json.load(f)

    request = brands_dict[brand_name]
    modified_result = re.sub(r',\s(?![^(]*\))', "\n", str(request))

    self.inside.add_widget(Label(text = modified_result))

    # Clear out the fields after submitting
    self.brand_input.text = ''





class Mcg(App):

def build(self):
    return Grid()



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

Здравствуйте, эта программа имеет текстовое поле ввода, и пользователь вводит название бренда, например, «Голубь», после чего он нажимает кнопку отправки, и кнопка подключается к функции press (). Все в программе на самом деле работает нормально, единственная проблема в том, что после того, как я печатаю продукты введенного бренда, скажем, он вводит другой бренд, в этом случае старый вывод все еще там, так что программа выводит новые продукты со старыми уже там. Как я могу это исправить? Заранее спасибо

1 Ответ

0 голосов
/ 30 января 2020

Я не могу проверить это без файла данных json, но проверьте это:

from kivy.app import App
from kivy.uix.label import Label
from kivy.uix.gridlayout import GridLayout
from kivy.uix.textinput import TextInput
from kivy.uix.button import Button
import json
import re


class Grid(GridLayout):

    def __init__(self, **kwargs):
        super(Grid, self).__init__(**kwargs)

        # Columns for the main view
        self.cols = 1

        # Start of the Inside
        self.inside = GridLayout()
        self.inside.rows = 3

        self.inside.add_widget(Label(text='Enter the Brand Name for its Products: '))
        self.brand_input = TextInput(multiline=False)
        self.inside.add_widget(self.brand_input)

        # Add the things in inside to the main
        self.add_widget(self.inside)

        self.submit = Button(text='Submit', font_size=20)
        self.submit.bind(on_press=self.pressed)
        self.add_widget(self.submit)

    def pressed(self, instance):
        # Clear out the fields after submitting
        self.brand_input.text = ''
        self.inside.clear_widgets()
        self.inside.add_widget(Label(text='Enter the Brand Name for its Products: '))
        self.inside.add_widget(self.brand_input)

        # Pull the text inside the textInput
        brand_name = self.brand_input.text

        with open('mcg_app/brands.json', 'r') as f:
            brands_dict = json.load(f)

        request = brands_dict[brand_name]
        modified_result = re.sub(r',\s(?![^(]*\))', "\n", str(request))

        self.inside.add_widget(Label(text=modified_result))


class Mcg(App):

    def build(self):
        return Grid()


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

Сбрасывает self.inside GridLayout при каждом нажатии кнопки ...

...