geloest: Einen Dialog aus einem Dialog aufrufen

Python und das Qt-Toolkit, erstellen von GUIs mittels des Qt-Designers.
Benutzeravatar
xWolf
User
Beiträge: 62
Registriert: Sonntag 2. November 2008, 01:21
Wohnort: China

Hallo,

Ich habe ein Problem, wenn ich ein "MainWindow" kreiere und daraus ein anderes Fenster/Dialog aufrufe, stuerzt das aufrufende Fenster ab und das aufgerufene reagiert auf keine Ereignisse mehr.

Zum Beispiel:
Mein Hauptfenster ist dies:

Code: Alles auswählen

#!/usr/bin/python

import commands
import os
import sys

from attt import*
from PyQt4 import QtGui, QtCore

from frmDirlist import Ui_Directory as Dlg

class DirList(QtGui.QMainWindow, Dlg):
   def __init__(self):
      QtGui.QMainWindow.__init__(self)
      self.setupUi(self)
      
      # Slots einrichten -----------------------------------------
      self.connect(self.befOK,QtCore.SIGNAL("clicked()"),self.onOK)   
      self.connect(self.befExit,QtCore.SIGNAL("clicked()"),self.onExit)   
      
   def onOK(self):
      sText=Aufruf_attt()
      print sText
            
   def onExit(self):
      print "Exit"
      self.close()
      

app = QtGui.QApplication(sys.argv)
DirL = DirList()
DirL.show()
app.exec_()  
Das aufzurufende Fenster ist nun das:

Code: Alles auswählen

#!/usr/bin/python

import commands
import os
import sys

from PyQt4 import QtGui, QtCore
from TTT import Ui_frmTTT as Dlg



class att(QtGui.QMainWindow, Dlg):
   def __init__(self):
      QtGui.QMainWindow.__init__(self)
      self.setupUi(self)
      
      # Slots einrichten -----------------------------------------
      self.connect(self.befOK,QtCore.SIGNAL("clicked()"),self.onOK)   
      #self.connect(self.befsExit,QtCore.SIGNAL("clicked()"),self.onsExit)   
      
   def onOK(self):
      pass
      
def Aufruf_attt():
   app2=QtGui.QApplication(sys.argv)
   attx = att()
   attx.show()
   app2.exec_()      
Ich starte also das erste (obere) Programm, sehe das Fenster und druecke den [OK]-Button. Dann erscheint auch das zweite Fenster, aber dann haengt alles.
Wie kann ich ein zweites Fenster aufrufen ohne den Absturz zu verursachen?

Ich moechte das auch gern in zwei Dateien unterbringen, damit man die Uebersicht behaelt.

Danke Euch im Voraus.

Wolf
Zuletzt geändert von xWolf am Sonntag 2. November 2008, 22:04, insgesamt 2-mal geändert.
lunar

Das sollte dich nicht wundern, schließlich erzeugst du zwei Instanzen der Klasse QApplication. Das überschreibt die Hauptereignisschleife und dürfte noch allerhand andere lustige Nebeneffekte haben, da QApplication noch allerhand andere globale Daten verwaltet.

Wenn du einen Dialog anzeigen willst, lies die Dokumentation zur Klasse QtGui.QDialog. Diese Klasse erzeugt eine lokale Ereignisschleife und lässt sich deswegen modal anzeigen.

Desweiteren solltest du deine Namensgebung überdenken und an PEP 8 anpassen. Bei Namen wie "sText" bekommt man ja Angst ;)

Auch ist das "commands" Modul durch "subprocess" ersetzt worden: "The subprocess module provides more powerful facilities for spawning new processes and retrieving their results. Using the subprocess module is preferable to using the commands module."
Benutzeravatar
xWolf
User
Beiträge: 62
Registriert: Sonntag 2. November 2008, 01:21
Wohnort: China

lunar hat geschrieben:Das sollte dich nicht wundern, schließlich erzeugst du zwei Instanzen der Klasse QApplication. Das überschreibt die Hauptereignisschleife und dürfte noch allerhand andere lustige Nebeneffekte haben, da QApplication noch allerhand andere globale Daten verwaltet.

Wenn du einen Dialog anzeigen willst, lies die Dokumentation zur Klasse QtGui.QDialog.
Hallo,
Danke fuer die schnelle Antwort.
Also mir steht die Dokumentation des Qt-Designer Version 4 fuer Linux zur Verfuegung.
und da steht:
int QDialog::exec () [slot]
Shows the dialog as a modal dialog, blocking until the user closes it. The function returns a DialogCode result.
If the dialog is application modal, users cannot interact with any other window in the same application until they close the dialog. If the dialog is window modal, only interaction with the parent window is blocked while the dialog is open.
By default, the dialog is application modal.
See also show(), result(), and setWindowModality().
Ich stolpere ueber die exec() - Funktion.
Denn m.E. wird eine Funktion doch so aufgerufen:

Code: Alles auswählen

 a = funktion(Parameter)
Ueber den Namen der Funktion wird der Ruckgabewert zurueckgegeben.
Nur dies funktioniert eben nicht, da diese Funktion halt mit speziellen Parametern aufgerufen werden muss.
Und wie in der Doc beschrieben QDialog.exec() funktioniert ueberhaupt nicht. da fliegen mir alle Fehlermeldungen um die Ohren.

Sie haben es ja bereits bemaengelt, (sText gefaellt ihnen nicht) aber ich komme aus der VisualBasic Ecke und programmiere mit dem OpenOffice StarBasic. Da sind diese Techniken nicht so kompliziert.
Deswegen verhake ich mich hier, weil mir wohl die Vorgehensweise bei der Programmierung dieser GUI noch fremd ist.
Leider hat auch der Kauf und das lesen des Buches "Python, das umfassende Handbuch" von Ernesti/Kaiser wenig Erhellendes gebracht.

Danke trotzdem fuer Ihr Bemuehen.

Wolf
Benutzeravatar
cofi
Python-Forum Veteran
Beiträge: 4432
Registriert: Sonntag 30. März 2008, 04:16
Wohnort: RGFybXN0YWR0

Die Dokumentation von Qt-Designer bezieht sich auf die C++ Version ;)
Für die PyQt Dokumentation sollte man www.riverbankcomputing.co.uk konsultieren.

Deinen Dialog solltest du von QDialog statt QMainWindow erben lassen.

QDialog.exec() gibt es in PyQt nicht, sondern wurde in .exec_() umbenannt.

Wenn das Buch von Galileo Press ist, dann solltest du es am besten im Mülleimer entsorgen - für Gründe: Forensuche anschmeissen ;).
Benutzeravatar
xWolf
User
Beiträge: 62
Registriert: Sonntag 2. November 2008, 01:21
Wohnort: China

cofi hat geschrieben:Die Dokumentation von Qt-Designer bezieht sich auf die C++ Version ;)
...
Deinen Dialog solltest du von QDialog statt QMainWindow erben lassen.

QDialog.exec() gibt es in PyQt nicht, sondern wurde in .exec_() umbenannt.
Danke fuer die Hilfe.

Ja, das es .exec() nicht gibt in Python ist klar. Ich verwende auch .exec_()

Aber beim Aufruf der zweiten Form kommen eben Fehler.

Wolf
Zuletzt geändert von xWolf am Montag 3. November 2008, 02:23, insgesamt 1-mal geändert.
lunar

Wir können nicht raten, welche Fehlermeldung du erhältst. Wenn du Hilfe möchtest, dann solltest du deinen Quellcode unter Verwendung der QDialog-Klasse samt Fehlermeldung posten.
Benutzeravatar
xWolf
User
Beiträge: 62
Registriert: Sonntag 2. November 2008, 01:21
Wohnort: China

Hallo zusammen,

Ich versuche es noch einmal.
Nun habe ich einmal zwei ganz simple Dialoge mit Qt-Design erstellt, nur ein Fenster und ein OK button.
Den Name fuer diese Buttons und auch die Dialognamen habe ich voellig verschieden benannt.

Mein Hauptdialog:
Datei: start.py

Code: Alles auswählen

#!/usr/bin/python
# -*- coding:utf-8 -*-

import sys
from PyQt4 import QtCore, QtGui
from dlgHaupt import Ui_dlgHauptfenster as Dlg
from Erst import*

class Hfenster(QtGui.QDialog, Dlg):
    def __init__(self):
        QtGui.QDialog.__init__(self)
        self.setupUi(self)
        self.connect(self.befHauptOK,QtCore.SIGNAL("clicked()"),self.onhauptOk)   
        self.show()
    
    def onhauptOk(self):
        # Hier soll mal der Aufruf des Dialogs "Erst" stehen
        # siehe nachfolgenden Code-Schnipsel
        pass   
         


app = QtGui.QApplication(sys.argv)
f = Hfenster()
app.exec_()
und mein Dialog, den ich aufrufen will, nach betaetigen des OK-Buttons.
Datei: Erst.py

Code: Alles auswählen

#!/usr/bin/python
# -*- coding:utf-8 -*-

import sys
from PyQt4 import QtCore, QtGui
from dlgErst import Ui_dlgErst as Dlg

class Erst(QtGui.QDialog, Dlg):
    def __init__(self):
        QtGui.QDialog.__init__(self)
        self.setupUi(self)  
        self.show()         
Wie im ersten Code zusehen ist, habe ich noch nicht einmal ein Ereignis fuer den OK-Button programmiert.
Nur allein die Zeile:

Code: Alles auswählen

from Erst import*
bewirkt die Fehlermeldung:

Code: Alles auswählen

File "./start.py", line 13, in __init__
self.connect(self.befHauptOK, QtCore.SIGNAL('clicked()'), self.onhauptOK)
Attribute Error: befHauptOK
Hier komme ich nicht weiter.
Kommentiere ich diese Zeile aus, gibt es keine Fehlermeldung.

Ach ja, in Wikipedia gibt es ein schoenes Programmbeispiel wo alles funktioniert.
http://de.wikibooks.org/wiki/Python_unter_Linux:_Qt4
Nur wird da der gesammte Dialog per Hand definiert und nicht per Qt-Designer.
Komischerweise funktioniert das. Nur mein einfacher Code klappt nicht.
Ich komm nicht dahinter.
Weiss jemand einen Rat?

ich weiss, Doc's lesen....
Aber ich habe eigentlich ein Problem was ich mit dem Werkzeug Python loesen muss. Und stehe ein bischen unter Zeitdruck.

Dank euch.

Wolf
Zuletzt geändert von xWolf am Sonntag 2. November 2008, 17:56, insgesamt 2-mal geändert.
Benutzeravatar
xWolf
User
Beiträge: 62
Registriert: Sonntag 2. November 2008, 01:21
Wohnort: China

Also ich habe es geschafft.

Hier die Start-Routine (file: start.py):

Code: Alles auswählen

#!/usr/bin/python
# -*- coding:utf-8 -*-

import sys
from PyQt4 import QtCore, QtGui
from dlgHaupt import Ui_dlgHauptfenster as Dlg
import Erst 

class Hfenster(QtGui.QDialog, Dlg):
    def __init__(self):
        QtGui.QDialog.__init__(self)
        self.setupUi(self)
        # Slots einrichten --------------------------------------------------------
        self.connect(self.befHauptOK,QtCore.SIGNAL("clicked()"),self.onhauptOk)   
        # Dialog anzeigen --------------------------------------------------------- 
        self.show()
    
    def onhauptOk(self):
       E=Erst.Erst()
       E.exec_()

app = QtGui.QApplication(sys.argv)
f = Hfenster()
app.exec_()
Und nun der Dialog, der aufgerufen werden soll (file: Erst.py)

Code: Alles auswählen

#!/usr/bin/python
# -*- coding:utf-8 -*-

import sys
from PyQt4 import QtCore, QtGui
from dlgErst import Ui_dlgErst as Dlg

class Erst(QtGui.QDialog, Dlg):
    def __init__(self):
        QtGui.QDialog.__init__(self)
        self.setupUi(self)  
        # Slots einrichten --------------------------------------------------------
        self.connect(self.befdlgOK,QtCore.SIGNAL("clicked()"),self.Raus)   
        # Dialog anzeigen --------------------------------------------------------- 
        self.show()
         
    def Raus(self):
       self.close()
Zeile 16 sollte nicht programmiert werden, wenn der Dialog "modal" also "gebunden" angezeigt werden soll. Dann wartet der aufrufende Dialog auf das Beenden des aufgerufenen Dialogs.

Danke fuer Eure Hilfe.

Wolf

P.S.
die Variable "sText" stammt aus der OpenOffice-Makro-Programmierung und dieses OOffice-Project wird ja durch Sun MicroSystems unterstuetzt. Da Sun auch wohl der Java-Ursprung ist (Objektorientierte Programmierung) und dort bei Sun auch so der Eine oder Andere C-Uebermensch rumlaeuft, habe ich mir nach der Sun Dokumentation eben diese Notation zu eigen gemacht wie:
sText steht fuer eine String Variable mit dem Namen "Text"
iGeld steht fuer integer-variable Geld
u.s.w.
Ich finde das schon sehr gut, dass beim Lesen eines Quelltextes allein durch den Namen einer Variable zu erkennen ist, was Sie darstellt bzw welchen Typ die Variable besitzt.
Ich werde wohl dabei bleiben.


Aber danke fuer den Tipp.

Freiheit ist immer die Freiheit der Andersdenkenden. Wie schon Rosa L. sagte :-)
Benutzeravatar
cofi
Python-Forum Veteran
Beiträge: 4432
Registriert: Sonntag 30. März 2008, 04:16
Wohnort: RGFybXN0YWR0

Nameskonventionen, die den Datentyp beschreiben, sind in Python nicht hilfreich, sondern sogar irreführend. Python ist eben eine dynamische Sprache, in der keine Variablen eines Datentyps erzeugt werden, sondern nur Namen, die dann als Referenzen dienen ;)

Naja dein Problem war, dass du dann 2 QApplications hattest ;)

Wo du gerade den Designer ansprichst: Du scheinst ihn falsch benutzt zu haben, wenn du einen Dialog erzeugst, der von QMainWindow erbst ;)
Benutzeravatar
xWolf
User
Beiträge: 62
Registriert: Sonntag 2. November 2008, 01:21
Wohnort: China

cofi hat geschrieben:Nameskonventionen, die den Datentyp beschreiben, sind in Python nicht hilfreich, sondern sogar irreführend. Python ist eben eine dynamische Sprache, in der keine Variablen eines Datentyps erzeugt werden, sondern nur Namen, die dann als Referenzen dienen ;)
Ist tatsaechlich mein Problem, da ich eben ein bischen Ordnung in meinem Programm haben will.
Naja dein Problem war, dass du dann 2 QApplications hattest, denn Code auf Toplevel wird direkt ausgeführt. Du hättest den letzten Teil in deinen vorangehenden Codeschnippseln in ein

Code: Alles auswählen

if __name__ == "__main__":
    ...
verpacken sollen.
Danke fuer den Tipp, nach dem ich die Loesung bereits gefunden hatte.
Wo du gerade den Designer ansprichst: Du scheinst ihn falsch benutzt zu haben, wenn du einen Dialog erzeugst, der von QMainWindow erbst ;)
Das hatte ich in meinem letzten Code ja wohl selbstaendig geaendert.

Wolf
lunar

Die ungarische Notation ist bei objektorientierten, dynamischen Sprachen wie Python völlig sinnlos, da keinerlei Möglichkeit existiert, die Einhaltung dieses Typs zu forcieren. Die Bindung eines Integers an den Namen "sText" ist möglich, folglich trägt "sText" keinerlei verwertbare Information. In der objektorientierten Programmierung ist der Typ des Objekts durch das Objekt selbst definiert und nicht durch den Namen, an den es gebunden ist. Auch ist ein bestimmter Typ mitunter gar nicht klar definiert. So stellt sich beispielsweise die Frage, welcher Datentyp nun tatsächlich mit dem Präfix "s" gemeint ist? Steht "sText" nun für einen "str"-Typ, einen "unicode"-Typ oder gar für "QString"? Alle diese Typen haben eine unterschiedliche Semantik, aber jeder ist bei der PyQt4-Programmierung präsent.

Deswegen ist diese Notation in keiner objektorientierten Sprache sinnvoll und wurde auch in keiner Sprache angewendet. Die einzige Ausnahme bildete Microsoft, das die Konventionen aus der WinAPI teilweise auf die MFC anwandte. Allerdings empfiehlt auch Microsoft, die ungarische Notation in neuem Code nicht mehr zu nutzen. Die Konvention, Namen mit Datentyppräfixen zu versehen, entstand übrigens auch nur, weil die Microsoft-Programmierer zu dumm waren, den Text des Erfinders der ungarischen Notation richtig zu lesen. Der hatte mit dieser Konvention nämlich eigentlich etwas völlig anderes im Sinn.

Im Übrigen ist Sun mit Java nicht Erfinder der Objektorientierten Programmierung, die gab es in Form von Smalltalk schon 15 Jahre vorher. Auch C++ und Python sind älter als Java. Und Sun hat auch nie die ungarische Notation für Java verwendet, noch die Nutzung derselben empfohlen.

Wenn du diese Notation nutzen willst, ist das deine Sache, denn mit dem resultierenden Code musst du ja arbeiten. Ich würde dir empfehlen, diese Notation aufzugeben und deine Namensgebung an PEP 8 zu orientieren. Das dürfte die Lesbarkeit deines Codes deutlich erhöhen und auch verhindern, dass du jedes Mal, wenn du Code hier postest, auf deine Namensgebung angesprochen wirst.

my 2 cents
lunar
Benutzeravatar
xWolf
User
Beiträge: 62
Registriert: Sonntag 2. November 2008, 01:21
Wohnort: China

lunar hat geschrieben: Die Bindung eines Integers an den Namen "sText" ist möglich, folglich trägt "sText" keinerlei verwertbare Information. In der objektorientierten Programmierung ist der Typ des Objekts durch das Objekt selbst definiert und nicht durch den Namen, an den es gebunden ist. Auch ist ein bestimmter Typ mitunter gar nicht klar definiert. So stellt sich beispielsweise die Frage, welcher Datentyp nun tatsächlich mit dem Präfix "s" gemeint ist? Steht "sText" nun für einen "str"-Typ, einen "unicode"-Typ oder gar für "QString"?
"s" steht fuer String und "i" fuer Integer wie ich es in meinem Beitrag auch formuliert habe.
Im uebrigen wird diese Notation in der Dokumentation zum StarBasic 8 unter OpenOffice verwendet.
lunar hat geschrieben:
Die einzige Ausnahme bildete Microsoft, das die Konventionen aus der WinAPI teilweise auf die MFC anwandte. Allerdings empfiehlt auch Microsoft, die ungarische Notation in neuem Code nicht mehr zu nutzen. Die Konvention, Namen mit Datentyppräfixen zu versehen, entstand übrigens auch nur, weil die Microsoft-Programmierer zu dumm waren, den Text des Erfinders der ungarischen Notation richtig zu lesen.
Autsch....
Ich bin kein Freund von Microsoft, wie sie in obigen Beitraegen erkennen koennen, arbeite ich mit Linux. Aber die MS-Programmierer als dumm zu bezeichnen, finde ich in hoechstem Masse bedenklich.
Da gehe ich auf weitere "Argumente" mal nicht ein.

:shock:

Uebrigens moechte ich mich hier im Forum nicht dafuer entschuldigen, dass ich neben meiner Arbeit als Maschinenbautechniker mich mit Programmierung beschaeftige um gewisse Problemstellungen in meiner Taetigkeit durch kleine Programme schnell und effektiv erledigen zu koennen. Sicher gibt es viele Forumteilnehmer die wie ich nur mal eben ein Problem loesen wollen/muessen.
Ich/wir sind damit keine Profi-Informatiker und wollen es auch nicht werden. Und deswegen werden unsere Programme oder auch Codeschnipsel nicht den hohen Erwartungen der menschlich hoehergestellten Profis gerecht.
Aber trotzdem denke ich, dass auch wir ein Recht auf unser Dasein besitzen und uns in die Grundzuege der Programmierung einarbeiten duerfen.
Aus diesem Grund habe ich eine kurze Loesung meines Problems konkret veroeffentlicht ohne herablassend irgendwelche unkonkreten Brocken in den Raum zu werfen.

Somit verbleibe ich mit freundlichen Gruessen

Wolf
Benutzeravatar
str1442
User
Beiträge: 520
Registriert: Samstag 31. Mai 2008, 21:13

@Dumme MS Entwickler:
Die von Simonyi entwickelte Konvention wurde bei Microsoft in der Application Group (Excel, Word etc.) mit großem Erfolg angewandt und in der Folge von der Systems Group (Windows) übernommen, wobei es zu einem grundlegenden Missverständnis kam. Simonyi spricht in seinem Paper vom „type“ einer Variablen, was vielfach als „Datentyp“ interpretiert wurde. Gemeint ist vielmehr die Art der Variablen im spezifischen Kontext einer Applikation. Es geht also nicht so sehr darum, ob eine Variable Ganzzahl oder Kommazahl ist, sondern ob es sich um einen Zähler handelt, eine Koordinate auf dem Bildschirm, einen Index in einem Array o. ä.
(Wikipedia)

In dem Fall kann man vielleicht nicht von Dummheit sprechen (da mehrdeutig), aber sicherlich von Einfalls- und Kreativlosigkeit mit integrierter Selber-Denk-Resistenz. Wozu soll es bitte überhaupt gut sein, mit i oder s einen Integer / String zu markieren, selbst in statischen Sprachen? Das seh ich beim deklarieren, und kann es bei guten Code auch gleich am Namen samt Kontext ablesen.

EDIT: Falsche Wörter genutzt wegen anderer Gedanken.
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

xWolf hat geschrieben:"s" steht fuer String und "i" fuer Integer wie ich es in meinem Beitrag auch formuliert habe.
String sagt nichts aus. In Qt-Programmen hast du sowohl Bytestrings als auch Unicodestrings als auch QStrings die alle Unterschiedlich sind. Das ist so als würde man z vor alle Zahldatentypen setzen, obwohl sie eben nicht gleich sind.
xWolf hat geschrieben:Im uebrigen wird diese Notation in der Dokumentation zum StarBasic 8 unter OpenOffice verwendet.
Openoffice macht es falsch, also muss man deren Fehler wiederholen? Tut mir leid, diese Argumentation macht keinen Sinn. Openoffice macht so einiges falsch, so ist etwa UNO die blödste Idee die man sich ausdenken kann, etwas was konzeptuell toll klingt, aber in der Realisiation eine Welt aus Schmerz ist.
xWolf hat geschrieben:Ich bin kein Freund von Microsoft, wie sie in obigen Beitraegen erkennen koennen, arbeite ich mit Linux. Aber die MS-Programmierer als dumm zu bezeichnen, finde ich in hoechstem Masse bedenklich.
Blöd trifft es zwar nicht ganz, aber bei einigen Dingen in Microsoft-Produkten überlegt man schon ob sie auf Crack waren. Das überlege ich mir aber auch bei vielen anderen Programmen mit augenscheinlichen Defekten.
xWolf hat geschrieben:Ich/wir sind damit keine Profi-Informatiker und wollen es auch nicht werden. Und deswegen werden unsere Programme oder auch Codeschnipsel nicht den hohen Erwartungen der menschlich hoehergestellten Profis gerecht.
Aber trotzdem denke ich, dass auch wir ein Recht auf unser Dasein besitzen und uns in die Grundzuege der Programmierung einarbeiten duerfen./quote]
Das ist doch Quatsch. Lunar hat dir einen guten Tipp gegeben, ihn begrundet und du hast ihn abgeweisen, indem du lieber auf die schlechte Weise weitermachst. Jetzt versuchst du das zu rechtfertigen. Natürlich ist es deine Sache, machs wie du willst, aber mit der Einstellung wirst du generell unter Programmierern wenig Respekt ernten. Es ist eine Sache nicht jeder dahergeworfenen Empfehlung nachzulaufen, eine andere, begründete Empfehlungen in den Wind zu schlagen.

Eine Entschuldigung ist nicht nötig und auch an niemanden hier zu richten, die einzige Person die sich dadurch schadet bist ja sowieso du. Entschuldigungen wären angebracht wenn jemand jemand anderen beleidigt oder angegriffen hätte. Das ist hier aber auf keiner Seite der Fall.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Benutzeravatar
xWolf
User
Beiträge: 62
Registriert: Sonntag 2. November 2008, 01:21
Wohnort: China

Leonidas hat geschrieben: Openoffice macht es falsch, also muss man deren Fehler wiederholen? Tut mir leid, diese Argumentation macht keinen Sinn. Openoffice macht so einiges falsch, so ist etwa UNO die blödste Idee die man sich ausdenken kann, etwas was konzeptuell toll klingt, aber in der Realisiation eine Welt aus Schmerz ist.
Hallo,

Oder besser Na HALLO ?!
OpenOffice macht alles falsch? Was soll dass denn?
Wollen Sie ueber richtig oder unrichtig in Programmierung entscheiden?
UNO ist auch nicht mein Ding. Da krieg auch ich graue Haare, aber ich kann doch diese Leute, die das entwickelt haben nicht zu Vollidioten erklaeren, nur weil ich/wir es nicht verstehen?!

Das ist doch Quatsch. Lunar hat dir einen guten Tipp gegeben, ihn begrundet und du hast ihn abgeweisen,...
Ich habe keinen Tipp abgewiesen. Sein Tipp war "lesen" und ich habe gelesen und habe meine Erkenntnis der Forumgemeinde zur Verfuegung gestellt. Wenn sie an dieser Loesung etwas auszusetzen haben, dann bitte konkret die Code-Passagen benennen.
Aber eigentlich... Wo haben Sie denn das her?
Sie muessen meinen Beitrag mit einem anderen verwechselt haben.
Was Sie hier schreiben entbehrt leider jeder Grundlage.

Mit freundlichen Gruessen

Wolf
DasIch
User
Beiträge: 2718
Registriert: Montag 19. Mai 2008, 04:21
Wohnort: Berlin

xWolf hat geschrieben:OpenOffice macht alles falsch? Was soll dass denn?
einiges != alles
Wollen Sie ueber richtig oder unrichtig in Programmierung entscheiden?
"Meiner Meinung nach ist etwas richtig wenn man beweisen kann dass es funktioniert." Simple Feststellung oder? Allerdings ist diese simple Feststellung mit der Konsequenz verbunden dass alles was sich nicht testen lässt(Beweis) "unrichtig" ist.

In der Realität kann man leider nicht alles testen, wass nicht heisst dass diese spezifische untestbare Sache "unrichtig" ist. Insofern ein durchaus sehr komplexes Thema interessantes Thema dass eine Menge Diskussionsstoff bietet und sich immer wieder für einen Flamewar aufwärmen lässt.
UNO ist auch nicht mein Ding. Da krieg auch ich graue Haare, aber ich kann doch diese Leute, die das entwickelt haben nicht zu Vollidioten erklaeren, nur weil ich/wir es nicht verstehen?!
Auch hier hat Leonidas nicht gesagt dass Vollidioten am Werke waren nur dass die Idee blöd war. Selbst intelligente Leute sollen manchmal blöde Ideen haben, glaub ich zumindest ich will mich hier ja nicht selbst als intelligent loben, eigenlob usw. ihr wisst schon...
Leonidas hat geschrieben:Das ist doch Quatsch. Lunar hat dir einen guten Tipp gegeben, ihn begrundet und du hast ihn abgeweisen,...
Ich habe keinen Tipp abgewiesen. Sein Tipp war "lesen" und ich habe gelesen und habe meine Erkenntnis der Forumgemeinde zur Verfuegung gestellt.
Nun, die Erkenntnis ist aber reichlich seltsam. Wenn du bei deiner Notation s für String verwendest, was für ein String ist das? str, QString, unicode? Alle drei haben andere Methoden und Verhalten sich anders, alle drei machen Sinn.

Insofern macht die Notation keine Sinn da man sowieso Namen vergeben sollte aus denen ersichtlich wird ob es ein String, eine Zahl, ein Boolscher Wert, eine Funktion, eine Methode oder eine Klasse ist.
Es sei den du wählst deine Namen so dass dies nicht der Fall ist. Das hätte zur Folge dass der Code nur noch schwer verständlich ist und damit unbrauchbar.

Womit wir übrigens wieder beim Thema richtig vs. unrichtig wären, den kann unbrauchbarer Code richtig sein?
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

xWolf hat geschrieben:Oder besser Na HALLO ?!
OpenOffice macht alles falsch? Was soll dass denn?
Wo habe ich das gesagt? Bitte ein konkretes Zitat, denn im Zitierten Ausschnitt habe ich so etwas nicht gesagt.
xWolf hat geschrieben:Wollen Sie ueber richtig oder unrichtig in Programmierung entscheiden?
UNO ist auch nicht mein Ding. Da krieg auch ich graue Haare, aber ich kann doch diese Leute, die das entwickelt haben nicht zu Vollidioten erklaeren, nur weil ich/wir es nicht verstehen?!
Alles was ich nicht verstehe muss also richtig sein? Nein, so funktioniert das auch nicht. Ich habe nun mit ziemlich vielen RPC-Mechanismen gearbeitet bzw es versucht (XML-RPC, SOAP, Corba, dbus, UNO, PyRO, COM) und UNO ist eine der umständlichsten Arten irgedwas hinzubekommen. Ich habe auch mit einem Sun-Mitarbeiter gesprochen, der ebenso zugegeben hat, dass UNO wirklich nicht das wahre ist, selbst im Hinblick auf COM.
xWolf hat geschrieben:Sein Tipp war "lesen" und ich habe gelesen
Gegen lesen ist auch nichts einzuwenden, sein Tipp war aber auch die Ungarische Notation fallen zu lassen.
xWolf hat geschrieben:Aber eigentlich... Wo haben Sie denn das her?
Sie muessen meinen Beitrag mit einem anderen verwechselt haben.
Was Sie hier schreiben entbehrt leider jeder Grundlage.
Das denke ich mir bei Ihren Beiträgen und Zitaten auch. :roll:
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
lunar

@xWolf
Offenbar hast du an meinem Posting einiges missverstanden. Es liegt mir fern, dich persönlich zu kritisieren. Es ging mir lediglich um "technische" Kritik an deiner Namenskonvention, und um einen Rat, deine Python-Programme lesbarer zu gestalten.

Es steht dir natürlich frei, Ratschlag und Kritik anzunehmen oder auszuschlagen. Du hast dich für letzteres entschieden, was mir recht sein soll. Ich muss ja schließlich nicht mit diesem Code leben.

Du musst dich auch nicht genötigt fühlen, deinen Stil hier zu rechtfertigen, denn überzeugen kannst du mich in der Hinsicht eh nicht. Diese Diskussion ist also müßig, und insofern beteilige ich mich auch nicht weiter daran. Ich habe dir ein Rat gegeben, du hast ihn ausgeschlagen, damit soll die Sache beendet sein.

PS:
Im Übrigen ist auch die formlose Anrede nicht als Beleidigung gemeint, sondern lediglich so üblich in diesem Forum. Wenn du auf dem "Sie" bestehst, dann soll mir das ebenfalls recht sein.
Benutzeravatar
xWolf
User
Beiträge: 62
Registriert: Sonntag 2. November 2008, 01:21
Wohnort: China

lunar hat geschrieben:@xWolf

Es steht dir natürlich frei, Ratschlag und Kritik anzunehmen oder auszuschlagen. Du hast dich für letzteres entschieden, was mir recht sein soll. Ich muss ja schließlich nicht mit diesem Code leben.
Ich habe den Ratschlag nicht abgeschlagen, ich habe nur versucht zu erklaeren, warum ich dies so gewaehlt habe. Schliesslich kann keiner wissen, wann was wie richtig ist. Und meine "Nach-Windows-VB-Programmier-Erfahrungen" waren nun mal im OpenOffice. Da habe ich nun mal die Dokumentation gelesen, die verfuegbar war/ist. Und das ist nicht unbedingt viel.
Dass die Jungs von SUN nun einiges falsch gemacht haben, wurde mir erst hier in diesem Forum mitgeteilt. Wissen konnte ich das nicht.
PS:
Im Übrigen ist auch die formlose Anrede nicht als Beleidigung gemeint, sondern lediglich so üblich in diesem Forum. Wenn du auf dem "Sie" bestehst, dann soll mir das ebenfalls recht sein.
Das "Sie" bezeugt nur den Respekt vor einer Person. Klar, und da hast Du recht, in den Foren ist "Du" angesagt.
Das war ein Versehen, aber das mit dem "Respekt" ist kein Versehen.

Trotzdem Danke fuer deine Hilfe und die Tipps.

Wolf

P.S.

Aber das eigentliche Problem war ja nicht die "ungarische Notation" sondern das Aufrufen eines Dialoges aus einem Anderen heraus. Und mein "sText" :? habe ich ja dann nach meinem ersten Posting konsequent weggelassen.
Ich versuche mich zu bessern. ;-)
Aber fuer Alle anderen, das "s" steht tatsaechlich fuer String. Nicht fuer str(), denn das ist eine Funktion. Und ein String ist eine Zeichenkette wie z.B. "python".
Aber wie gesagt, ich will mich bessern.
lunar

xWolf hat geschrieben:Aber fuer Alle anderen, das "s" steht tatsaechlich fuer String. Nicht fuer str(), denn das ist eine Funktion. Und ein String ist eine Zeichenkette wie z.B. "python".
Ein "String" existiert in Python nicht. Eine "Zeichenkette" wie "python" ist ein Literal des Typs "str". "str()" ist auch keine Funktion, sondern der Python-Typ für Bytestrings. Daneben gibt es noch Unicode-Strings, die du ebenfalls als Literal darstellen kannst:

Code: Alles auswählen

spam = u'egg'
Die Nutzung dieser Form ist bei PyQt4 besser geeignet, da Qt4 intern ebenfalls Unicode-Strings nutzt.
Antworten