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 data
Liste 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 return
Aussage
Keine Kommentare:
Kommentar veröffentlichen