Я использую Kivy в качестве пользовательского интерфейса для программного обеспечения для инвентаризации, поэтому мне удалось выяснить, как отображать кнопку для каждого элемента, который я извлекаю из своей базы данных. Однако его нельзя прокручивать, и я не могу понять, как назначить метод on_release для кнопок внутри Python.
. Я хочу сделать все кнопки фиксированной высоты и иметь возможность scroll.
метод on_release, который я хотел бы сделать для кнопок, - это то, где он изменит переменную "стикер" в классе "populateinfo" на любой идентификатор нажатой кнопки и заставит его двигаться на новый экран и показать класс "populateinfo". Мое лучшее предположение заключается в том, что я бы создал другой метод, в котором он изменяет наклейку переменной на идентификатор кнопки и изменяет экран на класс «populateinfo» с помощью диспетчера экрана. Тем не менее, я в растерянности и понятия не имею, как это сделать.
Я прошу прощения за мой ужасный код, я новичок в Python и все еще должен многому научиться.
Вот результат запуска класса принтеров:
вот как отформатирована моя база данных (я не знаю, будет ли это большая помощь):
Мой код:
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()