Путаница в том, как использовать виджеты Kivy из Python - PullRequest
0 голосов
/ 28 января 2020

Я использую Kivy в качестве пользовательского интерфейса для программного обеспечения для инвентаризации, поэтому мне удалось выяснить, как отображать кнопку для каждого элемента, который я извлекаю из своей базы данных. Однако его нельзя прокручивать, и я не могу понять, как назначить метод on_release для кнопок внутри Python.

. Я хочу сделать все кнопки фиксированной высоты и иметь возможность scroll.

метод on_release, который я хотел бы сделать для кнопок, - это то, где он изменит переменную "стикер" в классе "populateinfo" на любой идентификатор нажатой кнопки и заставит его двигаться на новый экран и показать класс "populateinfo". Мое лучшее предположение заключается в том, что я бы создал другой метод, в котором он изменяет наклейку переменной на идентификатор кнопки и изменяет экран на класс «populateinfo» с помощью диспетчера экрана. Тем не менее, я в растерянности и понятия не имею, как это сделать.

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

Вот результат запуска класса принтеров:

enter image description here

вот как отформатирована моя база данных (я не знаю, будет ли это большая помощь):

enter image description here

Мой код:

import kivy
from kivy.app import App
from kivy.uix.label import Label
from kivy.uix.boxlayout import BoxLayout
from kivy.lang import Builder
from kivy.uix.screenmanager import ScreenManager, Screen
from kivymd.theming import ThemeManager
from kivy.factory import Factory
import json
import requests
import time
from kivy.properties import ObjectProperty
from kivy.uix.screenmanager import Screen
from kivy.uix.boxlayout import BoxLayout
from kivy.uix.gridlayout import GridLayout
from kivy.uix.button import Button
from kivy.uix.scrollview import ScrollView
from kivy.core.window import Window
from kivy.app import runTouchApp

Builder.load_string("""
#:kivy 1.0

<printers>:

    box: box               
    BoxLayout:
        orientation: "vertical"
        id: box

<itemview>:
    BoxLayout:
        orientation: "vertical"
        height: 100
        BoxLayout:
            orientation: "vertical"
            TextInput:
                id: model
                text: ''
            TextInput:
                id: stage
                text: ''
            TextInput:
                id: pnum
                text: ''
            TextInput:
                id: snum
                text: ''
            TextInput:
                id: qop
                text: ''
            TextInput:
                id: box
                text: ''
            TextInput:
                id: notes
                text: ''
            TextInput:
                id: cob
                text: ''

            Button:
                text: 'populate'
                on_release: root.populatebutton()

""")

class printers(Screen,Button,GridLayout):
    box = ObjectProperty(None)
#lout = GridLayout(cols=2, size_hint_y=2)
def on_box(self, *args):
        num = []
        name = requests.get("https://productinfo-66c98.firebaseio.com/.json")
        name = json.loads(name.text)
        count = name["Count"]          
for i in range(count+1):
try:
if name[str(i)]["Box"].capitalize() != "":
                    num.append(i)
except KeyError:
                i += 1
for i in num:
            title = name[str(i)]["Model"]
            sticker = str(i)+" "
self.box.add_widget(Button(text=sticker+title,id=str(i),height=40,size_hint_y=None))

Factory.register('printers', cls=printers)

class populateinfo(Screen,BoxLayout):
def render(self):
        rows = requests.get("https://productinfo-66c98.firebaseio.com/Count.json")
        rows = int(rows)

def populatebutton(self):
        sticker = "5" This is the variable I'm trying to change
        item = requests.get('https://productinfo-66c98.firebaseio.com/'+sticker+'.json')
        item = json.loads(item.text)
        box = self.ids.box
        boxfield = item["Box"]
        box.text = boxfield

        cob = self.ids.cob
        checkedoutbyfield = item["Checked out By"]
        cob.text = checkedoutbyfield
        model = self.ids.model
        modelfield = item["Model"]
        model.text = modelfield

        pnum = self.ids.pnum
        pnumfield = item["ProductNumber"]       
        pnum.text = str(pnumfield)

        snum = self.ids.snum
        snumfield = item["SerialNumber"]       
        snum.text = str(snumfield)

        qop = self.ids.qop
        qopfield = item["QOP"]    
        qop.text = qopfield

        stage = self.ids.stage
        stagefield = item["Stage"]      
        stage.text = stagefield

        notes = self.ids.notes
        notesfield = item["Notes"]
        notes.text = notesfield
        Factory.register('populateinfo', cls=populateinfo)

class TestApp(App):
    theme_cls = ThemeManager()
    theme_cls.primary_palette = ("Blue")
#theme_cls.primary_color((0,.58,.85, 1))
def build(self):
        sm = ScreenManager()
        sm.add_widget(home(name='home'))
        sm.add_widget(main(name='main'))
        sm.add_widget(inventory(name='inventory'))
        sm.add_widget(printers(name='printers'))

return sm

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