Seite 1 von 2

signale beim qtdesigner

Verfasst: Samstag 31. Januar 2009, 13:12
von Maggy
Hi,

ich habe im QtDesigner ein QDialog erstellt. Dazu zwei QLineEdits
und einen QTextBrowser.
Mit welchen Signalen kann ich die Texte, die in die QLineEdits
eingegeben werden mit dem QTextBrowser verbinden, sodass
die Texte dort angezeigt werden?

Danke im Vorraus,
Maggy

Verfasst: Samstag 31. Januar 2009, 14:10
von Panke
Hast du mal in die Doku geguckt? Zum Beispiel hier unter Signals?

danke

Verfasst: Samstag 31. Januar 2009, 17:01
von Maggy
hab nichts gefunden, was mich weiter bringen würde

Re: danke

Verfasst: Donnerstag 12. März 2009, 23:27
von xWolf
Maggy hat geschrieben:hab nichts gefunden, was mich weiter bringen würde
Hallo,
Ja diese Doku hasse ich. Da werden einem nur Brocken hingehauen ohne konkrete Beispiele oder Erklaerungen. Ohne Informatikstudium ist man da fast chancenlos.

Also hier ein Codeschnipsel:

Code: Alles auswählen

class Suche(QtGui.QDialog, Dlg):
   def __init__(self, GVar):
      QtGui.QDialog.__init__(self)
      self.setupUi(self)    
      .
      .
      self.connect(self.txtStichwort, QtCore.SIGNAL("textChanged()"), self.StichwortAenderung)
txtStichwort ist ein Texteingabefeld, wie bei Dir das LineEdit.
StichwortAenderung eine Routine, die bei Aenderung des Inhaltes des Textes (schreiben...) eine von mir gewuenschte Aktion ausloest.

Also in der letzten Zeile wird das Signal "textChanged()" abgefangen und wenn dieses Signal eintritt zu einer Routine mit dem Namen
self.StichwortAenderung verzweigt.
Bei Dir muesste dann halt dort Programmcode stehen um Deinen Textbrowser zu beladen.

gruss Wolf

Verfasst: Donnerstag 12. März 2009, 23:36
von DasIch
Wenn schon nicht PEP 8 dann würde ich wenigstens einen konsistenten Codestil verwenden.

Verfasst: Freitag 13. März 2009, 01:51
von jerch
@DasIch
[ohne worte]

@Maggy
On-the-fly, also während des Schreibens im LineEdit gehts so wie xWolf angedeutet hat, mit textChanged(), z.B. kannst Du den Text einfach anhängen lassen:

Code: Alles auswählen

QtCore.QObject.connect(self.lineEdit, QtCore.SIGNAL("textChanged(QString)"), self.textBrowser.append)
Wahrscheinlich willst Du aber eher auf ein <enter> im LineEdit warten, um dann den Text abzusetzen. Dann brauchst Du eine Methode, die sich den Text holt, und im Browser einfügt, da das returnPressed()-Signal den Text nicht übergibt. Ungefähr so:

Code: Alles auswählen

...
def __init__(...):
    ...
    QtCore.QObject.connect(self.lineEdit, QtCore.SIGNAL("returnPressed()"), self.holeText)
...
def holeText(self):
    self.textBrowser.append(self.lineEdit.text())
Leider hat sich Riverbank nicht gerade mit Ruhm bekleckert, als die ihre Dokumentation geschrieben haben. Für jmd. ohne Grundkenntnisse in C++ sind schon die kleinsten Beispiele sehr schwer zu durchschauen.

Verfasst: Freitag 13. März 2009, 03:26
von xWolf
Leider hat sich Riverbank nicht gerade mit Ruhm bekleckert, als die ihre Dokumentation geschrieben haben. Für jmd. ohne Grundkenntnisse in C++ sind schon die kleinsten Beispiele sehr schwer zu durchschauen.
Genau meine Meinung

Wolf

Verfasst: Freitag 13. März 2009, 03:33
von xWolf
DasIch hat geschrieben:Wenn schon nicht PEP 8 dann würde ich wenigstens einen konsistenten Codestil verwenden.
Was verstehst Du darunter?

Konsitenz: Wikipedia =
Das Wort Konsistenz (lateinisch: con = zusammen + sistere = halten) bedeutet Bestand, Zusammenhalt, Geschlossenheit und In-sich-Ruhen.
Deine Definition nun?
Stein des Weisen gefunden oder Informatiker/Philosoph?

Wolf

Verfasst: Freitag 13. März 2009, 10:03
von Leonidas
Wikipedia hat geschrieben:Konsistenz im weiteren Sinn bezieht sich auf den logischen, hermeneutischen, funktionalen oder ästhetischen Bestand eines Gegenstandes (z. B. eines Textes, eines Begriffs, einer Methode oder Technik, eines Werkzeugs oder eines Kunstwerks), der in sich stimmig ist

Verfasst: Freitag 13. März 2009, 15:32
von DasIch
xWolf hat geschrieben:Was verstehst Du darunter?
Du benennst Methoden nach dem selben Schema wie Klassen, dass ist dumm da man nicht mehr auf dem ersten Blick sieht womit man es gerade zu tun hat.

Verfasst: Freitag 13. März 2009, 15:45
von lunar
DasIch hat geschrieben:
xWolf hat geschrieben:Was verstehst Du darunter?
Du benennst Methoden nach dem selben Schema wie Klassen, dass ist dumm da man nicht mehr auf dem ersten Blick sieht womit man es gerade zu tun hat.
Das ist mit Sicherheit wenig sinnvoll, aber hat wenig mit Konsistenz zu tun. Inkonsistent wäre es, kein einheitliches Namensschema auf Methoden anzuwenden. So gesehen ist das Namensschema von xwolf nicht nur wenig sinnvoll, sondern zudem noch inkonsistent, weil er sich bei der Benennung von Methoden weder nach PEP 8 noch nach PyQt4 selbst richtet :)

Verfasst: Samstag 14. März 2009, 20:47
von xWolf
DasIch hat geschrieben:Du benennst Methoden nach dem selben Schema wie Klassen, dass ist dumm da man nicht mehr auf dem ersten Blick sieht womit man es gerade zu tun hat.
ich wuerde gern lernen.
Sag mir wo in meinem Mini-Codeschnipsel der "Fehler" liegt.

Verfasst: Samstag 14. März 2009, 21:33
von DasIch
Zeile 8: self.StichwortAenderung

Verfasst: Samstag 14. März 2009, 22:38
von xWolf
DasIch hat geschrieben:Zeile 8: self.StichwortAenderung
Gut, und wo ist nun der Haken daran?

self.txtStichwort ist ein Textfeld in dem ein Stichwort steht.
self.StichwortAenderung ist die Routine, die ausgefuehrt wird, wenn sich im o.g. Textfeld was aendert.
Das finde ich irgendwie logisch, aber Irren ist menschlich. :wink:

Wie wuerdest Du diese Routine nennen?

Danke

Wolf

Verfasst: Samstag 14. März 2009, 22:43
von lunar
Ohne Vorahnung würde ich mich an den Namenskonventionen der verwendeten Bibliothek orientieren, schon allein, um Konsistenz zu erreichen. Das wäre logisch. Und es ist auch logisch, dass identische Namensgebung für Klassen und Methoden zu Verwirrung führt.

Im Allgemeinen aber ist PEP 8 der Styleguide für Python, den es zu beachten gilt.

Verfasst: Samstag 14. März 2009, 22:55
von xWolf
lunar hat geschrieben:Ohne Vorahnung würde ich mich an den Namenskonventionen der verwendeten Bibliothek orientieren, schon allein, um Konsistenz zu erreichen. Das wäre logisch. Und es ist auch logisch, dass identische Namensgebung für Klassen und Methoden zu Verwirrung führt.

Im Allgemeinen aber ist PEP 8 der Styleguide für Python, den es zu beachten gilt.
Lunar,

manchmal hilfst Du konkret und manchmal sprichst Du in Raetzeln.
Unter "PEP8" kommt bei Google 'ne menge Junk, keine Lust wegen 'ner Namensgebung einen Junk yard zu durchstreifen.
Gibt es irgendwie einen vernuenftigen Link.

Besser sag doch was euch an meiner Namensgebung konkret stoert.
Ich finde es nicht heraus zumal ich mir das nicht mal ausgedacht habe. Ist halt aus einem Buch was ich gekauft hatte ohne im Forum mich zu erkundigen ob es das Richtige ist :-(

Bitte mal Konkret, wie wuerdest Du mein Textfeld benennen und die Routine/Function die im Falle einer Aenderung des Textfeldes dann ausgefuehrt wird.

Das waere konkret ein Ansatzpunkt mit dem ich arbeiten kann.

Wolf

Verfasst: Samstag 14. März 2009, 23:06
von lunar
xWolf hat geschrieben:Unter "PEP8" kommt bei Google 'ne menge Junk
Eine Suche nach PEP 8 zeigt gleich als ersten Treffer die richtige Seite an. Wenn du keine Lust zu suchen hast, kannst du das auch einfach direkt sagen ...
Besser sag doch was euch an meiner Namensgebung konkret stoert.
Das wurde schon gesagt.
Bitte mal Konkret, wie wuerdest Du mein Textfeld benennen und die Routine/Function die im Falle einer Aenderung des Textfeldes dann ausgefuehrt wird.
Textfeld: self.keyword
Methode: self.keyword_change oder self.on_keyword_change

Verfasst: Samstag 14. März 2009, 23:18
von xWolf
lunar hat geschrieben: Textfeld: self.keyword
Methode: self.keyword_change oder self.on_keyword_change
Na aber muss ich denn fuer meine privaten Programme unbedingt englisch verwenden?
Wir reden doch im Forum auch deutsch und nicht englisch.
Ich sehe ein, wenn das Programm z.B. in einer internationalen Entwicklergemeinde rumgereicht wird, dann braucht man eine gemeinsame Sprache, aber fuer ein Codeschnipsel, dass jeder fuer sich bearbeiten kann wie er lustig ist, muss man doch keine Wortklauberei betreiben. Schliesslich war klar was ich meinte, da ich unter dem Codeschnipsel eine Erlaeuterung geschrieben hatte.

Mit PEP8 hast Du recht, das ist aber erst seit Neuestem, da ich in der Vergangenheit oefters kritisiert wurde, hatte ich danach bereits gesucht und nicht so richtig Brauchbares gefunden.
Ohne erneute Ueberpruefung habe ich dann meinen Beitrag verfasst.
Ist ein Lapsus.

Wolf

P.S. Also ich kann fuer mich behaupten ein simpler Amateur zu sein. Ich habe kein Informatik und/oder Philosophistudium hingelegt.
Mir geht es um gewisse Techniken die auch in teuren und teilweise 900 bis 1000 Seiten starken Buechern nicht erklaert werden. Und auch in gekauften Buechern werden oft Dinge geschrieben, die dann hier im Forum wieder in Frage gestellt werden.

Also wer hat denn nun recht?

Verfasst: Samstag 14. März 2009, 23:34
von lunar
xWolf hat geschrieben:
lunar hat geschrieben: Textfeld: self.keyword
Methode: self.keyword_change oder self.on_keyword_change
Na aber muss ich denn fuer meine privaten Programme unbedingt englisch verwenden?
Wieso solltest du? Mal abgesehen davon, dass dein privater Code erstmal niemanden was angeht, kann dich ja auch niemand kritisieren, wenn du es nie veröffentlichst ;)

Ich habe nur englische Bezeichner verwendet, weil ich es so gewohnt bin. Unabhängig davon ist die Art der Namensgebung aber auch das ausschlaggebende, es geht um die Groß- und Kleinschreibung und die Platzierung der Unterstriche, nicht um die Sprache der Namen.
Also wer hat denn nun recht?
Im Zweifel: PEP 8.

Verfasst: Samstag 14. März 2009, 23:51
von Leonidas
xWolf hat geschrieben:Na aber muss ich denn fuer meine privaten Programme unbedingt englisch verwenden?
Nein, musst du nicht. Aber ich persönlich finde einen Sprachmix im Quelltext ziemlich störend (schließlich sind sowohl Keywords auch als Stdlib sowie quasi jede Lib Englisch benannt) und spätestens wenn ich über den Code mit jemandem spreche der kein Deutsch kann (was zu Zeiten von IRC, Usenet, E-Mail etc. ziemlich häufig vorkommt) dann habe ich mit deutschen Bezeichnern sowieso ein Problem.
xWolf hat geschrieben:Ich sehe ein, wenn das Programm z.B. in einer internationalen Entwicklergemeinde rumgereicht wird, dann braucht man eine gemeinsame Sprache, aber fuer ein Codeschnipsel, dass jeder fuer sich bearbeiten kann wie er lustig ist, muss man doch keine Wortklauberei betreiben. Schliesslich war klar was ich meinte, da ich unter dem Codeschnipsel eine Erlaeuterung geschrieben hatte.
Logisch; aber auch Leute die kein oder nur schlecht Deutsch können, sind so in der Lage so Schnippsel zu verstehen. Wie gesagt, es ist deine Wahl. Für mich haben deutsche Namen eigentlich nur Nachteile, daher rate ich davon ab.
xWolf hat geschrieben:Mir geht es um gewisse Techniken die auch in teuren und teilweise 900 bis 1000 Seiten starken Buechern nicht erklaert werden. Und auch in gekauften Buechern werden oft Dinge geschrieben, die dann hier im Forum wieder in Frage gestellt werden.

Also wer hat denn nun recht?
Im Zweifelsfall der der es besser und schlüssiger begründen kann. Du solltest dir bewusst sein, dass Druckwerk nicht gleich hohe Qualität bedeutet. Ich finde ab und zu in Python-Büchern solchen Code dass ich mir an den Kopf fasse. Wenn du ein Buch willst dass Hochqualitativ ist, solltest du weder nach dem Preis (weil auch Schrott viel Geld kosten kann), noch nach der Seitenanzahl (je mehr Seiten desto besser gilt eigentlich nur in den seltensten Fällen) noch nach den Amazon-Bewertungen (die meist von Anfängern geschrieben worden sind, die nicht unbedingt wissen was gut ist und was nicht) gehen, sondern dich in der Community nach Meinungen umsehen. Oftmals sind Bücher von Leuten die sich in der Community engagieren und mit Community-Hilfe geschrieben worden sind mit am besten, siehe dazu etwa "Practical Common Lisp" vs. "Practical OCaml" oder "Dive into Python" vs "Python, das umfassende Handbuch". Du kannst aber auch auf Autoren-Namen setzen; so ist etwa das Buch "Real World Haskell" bei dem Brian O'Sullivan mitgeschrieben hat, angeblich ziemlich gut was mich mit Blick auf die Vorgeschichte der Autoren nicht wundert.