QLineEdit createn und wieder deleten, generische Programm..?

Python und das Qt-Toolkit, erstellen von GUIs mittels des Qt-Designers.
BlackJack

@machupicchu: Du bettelst hier jetzt echt so lange herum bis Dir jemand den fertigen Code liefert? Das was Du da zeigst ist schon wieder horrender Unsinn der nicht funtkioniert und *wieder* zeigt das Du die absoluten Grundlagen nicht verstanden hast. Habe ja langsam den Verdacht wir füttern hier einen Troll. :roll:

Wenn Du die Grundlagen lernst, dann löst das sehr wahrscheinlich Dein Problem, darum macht die Reihenfolge „Du löst Dein Problem und dann lernst Du die Grundlagen” keinen Sinn. Zumal ja auch gar nicht Du das Problem löst, sondern es von uns gelöst bekommen willst. Das Du die Lösung nicht verstehen wirst, ist ziemlich deutlich aus den Quelltextschnippseln die Du hier zeigst zu sehen.
EmaNymton
User
Beiträge: 174
Registriert: Sonntag 30. Mai 2010, 14:07

Von mir wirst du keinen fertigen Quelltext kriegen bzw. erst, wenn du nachweislich die Grundlagen kannst.

Es ist auch wichtig mal die Dokumentation zu lesen und sich die Fehlermeldungen anzuschauen. Dein verändertes Beispiel

Code: Alles auswählen

label_objects = [x for x in self.list_label]
self.line_edit_layout_datasource.addWidget(label_objects)
ist mit Verlaub Blödsinn, da addWidget keine Liste übergeben bekommen will sondern das gerade angelegte QLabel und das sieht man auch in der Fehlermeldung, die da kommt

Code: Alles auswählen

TypeError: 'PySide.QtGui.QBoxLayout.addWidget' called with wrong argument types:
  PySide.QtGui.QBoxLayout.addWidget(list)
Supported signatures:
  PySide.QtGui.QBoxLayout.addWidget(PySide.QtGui.QWidget, int = 0, PySide.QtCore.Qt.Alignment = 0)
D.h. es erwartet ein Widget, wie der Name ja auch impliziert. Das mit dem del funktioniert so nicht, Madmartigan hatte dir ja schon den Hinweis gegeben, wie man Widgets entfernt. Und wie man Elemente aus einer Liste entfernt, lernt man in Grundlagentutorials.
Benutzeravatar
Madmartigan
User
Beiträge: 200
Registriert: Donnerstag 18. Juli 2013, 07:59
Wohnort: Berlin

BlackJack hat geschrieben:Habe ja langsam den Verdacht wir füttern hier einen Troll. :roll:
Stimmt, der Gedanke macht sich breit.
Ich spare mir hier neue Beiträge solange die angebotenen Hinweise weiterhin im Nichts enden.

Beratungsresistenz +1 :roll:
Benutzeravatar
machupicchu
User
Beiträge: 61
Registriert: Samstag 1. Juni 2013, 14:04

:shock:

Code: Alles auswählen

Von mir wirst du keinen fertigen Quelltext kriegen bzw. erst, wenn du nachweislich die Grundlagen kannst.

Es ist auch wichtig mal die Dokumentation zu lesen und sich die Fehlermeldungen anzuschauen. 
Ja sorry. Hatte statt label_objects, die variable x stehen gehabt. War mein Fehler.

Code: Alles auswählen

    label_objects = [x for x in self.list_label]
    self.line_edit_layout_datasource.addWidget(x)
So, wäre es richtig.

Ihr müsst mir kein fertiges Programm geben.

Jetzt habe ich die Objekte in meiner Liste. Kann auch die Objekte aus meiner Liste löschen. Ich will doch nur wissen wie ich jetzt die Objekte von meinem Layout löschen kann.
EmaNymton
User
Beiträge: 174
Registriert: Sonntag 30. Mai 2010, 14:07

Die Zeile

Code: Alles auswählen

label_objects = [x for x in self.list_label]
ist redundant. Warum willst du aus deiner Liste self.list_label eine neue Liste label_objects machen, die du dazu noch nicht mal wieder brauchst?
Jetzt habe ich die Objekte in meiner Liste. Kann auch die Objekte aus meiner Liste löschen. Ich will doch nur wissen wie ich jetzt die Objekte von meinem Layout löschen kann.
Ein bisschen Eigeninitiative bitte, steht in diesem Thread, im zweiten Beitrag!
Benutzeravatar
machupicchu
User
Beiträge: 61
Registriert: Samstag 1. Juni 2013, 14:04

Überschreibe die beiden Objekte nicht, sondern erzeuge neue. Beispielsweise in einer Liste. Wenn du dann bestimmte Objekte aus der GUI entfernen willst, setzt du ihren Parent auf None und löschst den Listeneintrag.
1. Überschreibe die Objekte nicht - erledigt
2. Erzeuge neue in einer Liste - erledigt
Code:

Code: Alles auswählen

 
    list_label = [] 
    def createNewTextEditApiKey(self):
        if self.lineEdit_combobox_api.currentText() == 'New Data':
            text, _ = QInputDialog.getText(self, 'Input Dialog',
            'Enter data name:')
            self.new_line_label = QLabel(text)
            self.list_label.append(self.new_line_label)
            #t = [x for x in self.list_label] # Ok brauche ich nicht
            self.line_edit_layout_datasource.addWidget(new_line_label)
        print self.list_label
3. Parent auf None und löschst den Listeneintrag - nicht erledigt

Ok, habe jetzt folgendes gemacht, aber da brauche ich noch einen Tipp.
Habe jetzt objekt auf none gesetzt und Listeneintrag gelöscht. Habe ich nicht verstanden mit dem Parent auf None setzen.


Code:

Code: Alles auswählen

def deleteData(self):
        if self.lineEdit_combobox_api.currentText() == 'Delete Data':
            self.new_line_label.setParent(None)
            del self.list_label[-1]
               
Zuletzt geändert von machupicchu am Mittwoch 23. April 2014, 15:05, insgesamt 1-mal geändert.
EmaNymton
User
Beiträge: 174
Registriert: Sonntag 30. Mai 2010, 14:07

Was und wie setze ich parent=none und wie löscht es dann meinen Objekt von meinem Layout.
http://www.lmgtfy.com/?q=widget+set+parent+none
Benutzeravatar
machupicchu
User
Beiträge: 61
Registriert: Samstag 1. Juni 2013, 14:04

Code: Alles auswählen

     
    def deleteData(self):
        if self.lineEdit_combobox_api.currentText() == 'Delete Data':
            self.new_line_label.setParent(None)
            del self.list_label[-1]
Ok, jetzt löscht der mir wieder nur den letzten Objekt. :K
BlackJack

@machupicchu: Ja, der Rechner macht das was man ihm sagt, und nicht das was man gerne hätte, aber nicht in der Lage ist ihm zu sagen. Ich bin mir übrigens auch nicht so wirklich sicher ob das eine gute Idee ist Objekte ohne Parent in einem Layout zu haben, oder ob das nicht am Ende auch wieder Probleme macht.
EmaNymton
User
Beiträge: 174
Registriert: Sonntag 30. Mai 2010, 14:07

Ich bin mir übrigens auch nicht so wirklich sicher ob das eine gute Idee ist Objekte ohne Parent in einem Layout zu haben, oder ob das nicht am Ende auch wieder Probleme macht.
Ja, aber wer nicht hören will...

http://pyside.github.io/docs/pyside/PyS ... .setParent
Warning
It is very unlikely that you will ever need this function. If you have a widget that changes its content dynamically, it is far easier to use PySide.QtGui.QStackedWidget .
@machupicchu: Überleg doch bitte mal, was unter self.new_line_label und self.list_label[-1] zu finden ist!
Benutzeravatar
machupicchu
User
Beiträge: 61
Registriert: Samstag 1. Juni 2013, 14:04

Naja, hatte es jetzt mal mit removeWidget versucht, aber das funktioniert auch noch nicht so ganz.

Code: Alles auswählen

  def deleteData(self):
        if self.lineEdit_combobox_api.currentText() == 'Delete Data':
            self.line_edit_layout_datasource.removeWidget(self.list_label[-1])
            del self.list_label[-1]

@EmaNymton

list_label[-1] gibt mir den letzten objekteintrag in der liste zurück
new_line_label, habe ich verwendet, um die liste mit den objekten zu erzeugen.

:K
Antworten