Kivy сделать сетку внутри метки или кнопки - PullRequest
0 голосов
/ 29 сентября 2018

Возможно ли иметь сетку, подобную макету, внутри Label или Button в kivy.

У меня есть приложение, которое получает CSV-файл с информацией о продукте, и я хотел бы заполнить MainScreen строками изфайл CSV.Каждая строка должна выглядеть следующим образом:

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

У меня еще нет кода для заполнения строк на главном экране, но так он выглядит до сих пор.Чтобы уточнить.На данный момент мне не нужна помощь с импортом файлов CSV, но с методом для его отображения, который соответствует вышеуказанным критериям (рисунок)

Код пока выглядит следующим образом:
ATmain.py

from kivy.app import App
from kivy.uix.screenmanager import Screen, ScreenManager
from kivy.core.window import Window
from kivy.lang import Builder
from kivy.properties import StringProperty

Window.clearcolor = (1,1,1,1)
Window.size = (270, 480)


class LoginScreen(Screen):
    input = StringProperty("")


class MainScreen(Screen):
    username = StringProperty('')


class ScreenManagement(ScreenManager):
    pass


presentation = Builder.load_file("app.kv")


class ATApp(App):
    presentation = Builder.load_file("app.kv")
    def build(self):
        return presentation


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

app.kv:

# File name: main.py
#:import FadeTransition kivy.uix.screenmanager.FadeTransition
#:kivy 1.10.1

ScreenManagement:
    transition: FadeTransition()
    LoginScreen:
        id: login
    MainScreen:
        username: login.input



<LoginScreen>:
    name: "login"
    canvas:
        Color:
            rgba: [1,1,1]
        Rectangle:
            pos: self.pos
            size: self.size
    FloatLayout:
        rows:2
        cols:1
        background_color: 1,1,1,1
        Label:
            size_hint: 0.3, 0.05
            pos_hint: {"x": 0.5 - 0.3/2, "center_y": 0.4}
            text:"Kasutaja"
            color: 0,0,0,1
        TextInput:
            id: input
            size_hint: (0.3, None)
            height: 30
            pos_hint: {"x": 0.5 - 0.3/2, "center_y": 0.3}
            multiline: False

        Button:
            id: confirm_login
            text: "Login"
            size_hint: 0.15, 0.07
            pos_hint: {"x": 0.5 - 0.15/2, "center_y": 0.2}
            background_color: 0.9,0.9,0.9,1
            on_press: self.background_color = (1,0,0,1)
            on_release: root.input = input.text; app.root.current = "main"

<MainScreen>:
    name: "main"
    canvas:
        Rectangle:
            pos: self.pos
            size: self.size 
    Label:

        id:name
        text: root.username
        color: (0,0,0,1)
        size_hint_y: None
        height: 30
        size_hint_x: 1
        pos_hint: {"right": 1, "top": 1}


    BoxLayout:
        orientation: "vertical"
        size_hint_y: None
        size_hint_x: 1
        pos_hint_x: None
        pos_hint_y: 1

        Button:
            text: "Item1"
            color: (0,0,0,1)
            height: self.height
            size_hint_y: None
            size_hint_x: 1
            pos_hint: {"right": 1, "top": 0}

Я был бы очень признателен, если бы кто-нибудь смог бы направить меня в правильном направлении!

1 Ответ

0 голосов
/ 03 октября 2018

Путь к хаку будет просто использовать GridLayout или любой другой макет, а затем назначить свойства кнопки макета таким образом, чтобы на них можно было нажимать:

from kivy.behaviors import ButtonBehavior

#then make a clickable grid
class GridButton(GridLayout, ButtonBehaviour):
    def __init__(self, **kwargs):
        super().__init__(**kwargs)
    #Then do whatever you want to do

Другой способ сделать это:Предполагается использовать обратный вызов on_touch_down и проверить, находится ли касание в пределах виджета

...