GOOGLE ADS

Freitag, 29. April 2022

So aktualisieren Sie RecycleView Kivy

Dies ist meine erste Frage, also tut mir leid, wenn ich sie schlachte.

Ich mache eine Anwendung, die eine effizientere Protokollerstellung für andere Personen bei meiner Arbeit ermöglicht.

Das Problem ist, dass ich versuche, die erstellte RecycleView zu aktualisieren, aber aus irgendeinem Grund funktioniert es nicht. Einige Lösungen im Web empfehlen die Verwendung der Methode.refresh_from_data(), aber es hat nicht funktioniert, und alle anderen Lösungen sind zu kompliziert (oder ich bin zu dumm).

Ich habe diese Funktion - add_entry, die Informationen aus zwei TextInputs als Wörterbuch innerhalb der Protokollliste hinzufügt.

Im Moment zeigt meine RecycleView nur Zahlen an, weil keine Lösung funktioniert hat, und ich hatte wirklich Mühe, überhaupt eine Recycle-Ansicht zu erstellen.

Hier ist ein relevanter Teil des Python-Codes:

class DrillingInfoPage(Screen):
rod = 1
dist = 3
protocol = ListProperty() # {Rod:_,Distance:_,Proc:_,Depth:_}
def add_entry(self, proc, depth):
self.protocol.append({'Rod': 0, 'Distance': 0, 'Proc': 0, 'Depth': 0})
self.protocol[self.rod-1]['Proc'] = proc
self.protocol[self.rod-1]['Depth'] = depth
self.protocol[self.rod-1]['Rod'] = self.rod
self.protocol[self.rod-1]['Distance'] = self.dist
self.rod += 1
self.dist += 3
print(self.protocol)
return self.protocol
class Profile(Screen):
pass
class WindowManager(ScreenManager):
pass
class ColorsPopup(Screen):
popupWindow = None
class Recycle(RecycleView):
def __init__(self, **kwargs):
super(Recycle, self).__init__(**kwargs)
self.data = [{'text': str(x)} for x in range(50)]
kv = Builder.load_file("my.kv")
class MyApp(App):
def build(self):
return kv
if __name__ == '__main__':
MyApp().run()

Und hier ist ein relevanter Teil der KV-Datei:

<DrillingInfoPage>:
name: 'third'
BoxLayout:
orientation: 'vertical'
Label:
size_hint: 1,.4
text: 'Drilling Info Page'
GridLayout:
size_hint: 1,.1
cols:3
GridLayout:
cols:2
Label:
text: 'BG'
TextInput:
id: start
multiline: False
GridLayout:
cols:2
Label:
text: 'BG'
TextInput:
id: end
multiline: False
Button:
text: 'Confirm'
on_release: drilling_holes.text = 'BG' + start.text + ' -----> ' + 'BG' + end.text
GridLayout:
size_hint: 1,.1
cols:3
GridLayout:
cols:2
Label:
text: '%:'
TextInput:
id: proc
multiline: False
GridLayout:
cols:2
Label:
text: 'Depth:'
TextInput:
id: depth
multiline: False
Button:
text: 'Add'
on_release: root.add_entry(proc.text, depth.text)
Label:
id: drilling_holes
size_hint: 1,.2
text: ''
Recycle:
id: drilling_data
data: self.data
viewclass: 'Label'
RecycleBoxLayout:
default_size: None, '25dp'
default_size_hint: 1, None
size_hint_y: None
height: self.minimum_height
orientation: 'vertical'
Label:
size_hint: 1,.2
text: ''
GridLayout:
size_hint: 1,.17
cols:2
Button:
text: 'Go Back'
on_release:
app.root.current = 'second'
root.manager.transition.direction = 'down'
Button:
text: 'Confirm'
on_release:
app.root.current = 'last'
root.manager.transition.direction = 'up'

Ich habe versucht, einige Funktionen innerhalb der RecycleView-Klasse zu erstellen, die die Daten aktualisieren würden, sowie innerhalb der DrillingInfoPage-Klasse, aber nichts scheint zu funktionieren.

Ich bin neu in Python und insbesondere in Kivy und hoffe daher, dass mich jemand Weises in die richtige Richtung führen kann:)

So sieht der Bildschirm selbst jetzt aus, idealerweise sollte er zunächst leer sein und durch Drücken der Schaltfläche „Hinzufügen" sollte eine neue Zeile hinzugefügt werden


Lösung des Problems

Sie müssen nur die neuen Informationen zur dataListe der hinzufügen RecycleView. Es ist nicht genau klar, was Sie der hinzufügen möchten RecycleView, aber Sie können Ihrer add_entry()Methode einfach eine Zeile wie folgt hinzufügen:

 self.ids.drilling_data.data.append({'text': proc}) # add new entry to data list

Und diese Methode braucht keine returnAussage

Keine Kommentare:

Kommentar veröffentlichen

Warum werden SCHED_FIFO-Threads derselben physischen CPU zugewiesen, obwohl CPUs im Leerlauf verfügbar sind?

Lösung des Problems Wenn ich das richtig verstehe, versuchen Sie, SCHED_FIFO mit aktiviertem Hyperthreading ("HT") zu verwenden, ...