Передача виджета в другой класс - PullRequest
0 голосов
/ 02 мая 2018

Я новичок в киви. Я действительно хочу сделать кнопку "да" внутри всплывающего окна класса "popup_add", чтобы прочитать виджет списка внутри класса "invoice".

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

У меня есть важные коды здесь:

Python файл:

class invoice(BoxLayout):
    shop_list_input = ObjectProperty()
    shop_name_input = ObjectProperty()

    def add_shop(self):
        add_popup = popup_add()
        add_popup.open()

class popup_add(Popup):

    def pop_yes(self, text_input,listView):
        store_name = text_input
        listView.adapter.data.extend([store_name])
        listView._trigger_reset_populate()

файл kivy:

#: import main testKivy
#: import ListAdapter kivy.adapters.listadapter.ListAdapter
#: import ListItemButton kivy.uix.listview.ListItemButton

invoice:

<invoice>:

    orientation: "vertical"
    padding: 10
    spacing: 10
    shop_name_input: shop_name
    shop_list_input: shop_list

    BoxLayout:
        orientation: "vertical"
        size_hint_y: None
        height: "60dp"

        TextInput:
# i found on google to use app to allow other class to access text, is there 
# a way to make listview global similar to app?
            on_text: app.input_sentence=self.text
            id: shop_name
            size_hint: 1,1

    BoxLayout:
        size_hint_y: None
        height: "40dp"

        Button:
            text: "Add Store"
        size_hint_x: 15
        on_press: root.add_shop()

# anyway to make listview  widget accessible to other classes?
    ListView:
        id: shop_list
        adapter:
            ListAdapter(data=["Shop A","Shop B","Shop C"], cls=main.ShopListButton)

<popup_add>:
    title: 'notification'
    auto_dismiss: False
    size_hint: .6,.3
    FloatLayout:
        Button:
            text: "Yes"
# here is where i want to insert listview, inside root.pop_yes.
            on_press: root.pop_yes(app.input_sentence)
            pos_hint: {"x": .2, 'y':.25}
            size_hint: .2, .2
        Button:
            text: "No"
            on_press: root.dismiss()
            pos_hint: {"x": .6, 'y':.25}
            size_hint: .2, .2
        Label:
            text: "Are you sure to add " + app.input_sentence
            pos_hint: {"x": .2, 'y':.65}
            size_hint: .6, .3

Заранее спасибо!

Ответы [ 2 ]

0 голосов
/ 09 мая 2018

Вы можете определить функцию __init__ для popup_add и сделать так, чтобы она принимала переменную.

class invoice(BoxLayout):
    shop_list_input = ObjectProperty()
    shop_name_input = ObjectProperty()

    def add_shop(self):
        add_popup = popup_add(self.ids.shop_list)
        add_popup.open()

class popup_add(Popup):
    def __init__(self, shop_list_widget, **kwargs):
        super(popup_add, self).__init__(**kwargs):
        self.shop_list_widget = shop_list_widget

    def pop_yes(self, text_input,listView):
        store_name = text_input
        listView.adapter.data.extend([store_name])
        listView._trigger_reset_populate()

Делая это таким образом, вы все равно сможете определить структуру pop в файле kv.

0 голосов
/ 08 мая 2018

хорошо, так что очевидно, что вы новичок в Kivy, но не проблема.

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

в моем коде, я сделал это

def success(self):
            popup18 = Popup(title='Loading Screen',content=Label(text='SENT',font_size=40,pos_hint={'center_y': 0.5, 'center_y': .5}),size_hint=(None, None), size=(400, 400),auto_dismiss=True)
            popup18.open()

Вы можете проверить синтаксис написания этого материала на https://kivy.org/docs/api-kivy.uix.popup.html

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

P.S не забудьте импортировать всплывающее окно из Kivy

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