signale beim qtdesigner

Python und das Qt-Toolkit, erstellen von GUIs mittels des Qt-Designers.
Maggy
User
Beiträge: 2
Registriert: Samstag 31. Januar 2009, 13:06

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
Panke
User
Beiträge: 185
Registriert: Sonntag 18. März 2007, 19:26

Hast du mal in die Doku geguckt? Zum Beispiel hier unter Signals?
Maggy
User
Beiträge: 2
Registriert: Samstag 31. Januar 2009, 13:06

hab nichts gefunden, was mich weiter bringen würde
Benutzeravatar
xWolf
User
Beiträge: 62
Registriert: Sonntag 2. November 2008, 01:21
Wohnort: China

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
DasIch
User
Beiträge: 2718
Registriert: Montag 19. Mai 2008, 04:21
Wohnort: Berlin

Wenn schon nicht PEP 8 dann würde ich wenigstens einen konsistenten Codestil verwenden.
jerch
User
Beiträge: 1669
Registriert: Mittwoch 4. März 2009, 14:19

@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.
Benutzeravatar
xWolf
User
Beiträge: 62
Registriert: Sonntag 2. November 2008, 01:21
Wohnort: China

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
Benutzeravatar
xWolf
User
Beiträge: 62
Registriert: Sonntag 2. November 2008, 01:21
Wohnort: China

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
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

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
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
DasIch
User
Beiträge: 2718
Registriert: Montag 19. Mai 2008, 04:21
Wohnort: Berlin

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.
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 :)
Benutzeravatar
xWolf
User
Beiträge: 62
Registriert: Sonntag 2. November 2008, 01:21
Wohnort: China

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.
DasIch
User
Beiträge: 2718
Registriert: Montag 19. Mai 2008, 04:21
Wohnort: Berlin

Zeile 8: self.StichwortAenderung
Benutzeravatar
xWolf
User
Beiträge: 62
Registriert: Sonntag 2. November 2008, 01:21
Wohnort: China

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
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.
Benutzeravatar
xWolf
User
Beiträge: 62
Registriert: Sonntag 2. November 2008, 01:21
Wohnort: China

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
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
Benutzeravatar
xWolf
User
Beiträge: 62
Registriert: Sonntag 2. November 2008, 01:21
Wohnort: China

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?
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.
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

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.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Antworten