Tutorial zu Qt und Sockets

Python und das Qt-Toolkit, erstellen von GUIs mittels des Qt-Designers.
3ff
User
Beiträge: 191
Registriert: Dienstag 22. Dezember 2009, 12:54
Wohnort: Odenwald Sued-Hessen

@usingKarmicKoala
das passiert mir dauernd. Das liegt daran, da Du die falschen Libraries importiert hast bzw. die Qt4 Version sich irgendwo beißt.
--------------------------------------------------------
Dein Ausgangsproblem mit dem Tutorium in PyQt4 hatte ich auch. riverbankcomputing hilft nicht weiter.
Die sind gewissermassen der Taxifahrer. Der Fahrgast( und Bezahler) ist wohl Nokia.
Ich reg mich nicht mehr darüber auf, das die Beispiele zur PyQt.Library in Cpp sind.
Selbst gute Tutorien zu PyQt4 sind sehr selten zu finden. Das scheint Nokia alles nicht zu interessieren.
Ich bin in Qt4 und den Programmgenerator Pyuic4 hineingestossen worden.
Mit welchem Linux arbeitest Du? oder mit Windows?
Ich hab Ubuntu drauf und die jeweils neueste Version von Python ist immer auf dem Spiegelserver.
Mit Synaptic oder apt-get gibts immer die neueste Version, die wird soford eingebunden und fertig.
Der deutsche Spiegelserver steht an der FU Berlin, aber das ist unerheblich. Da kommt der code schon "vorverdaut"runter.
Manchmal kommen die Programme auch aus England aus Kent.
Den Tarball auszupacken ist sogar gefährlich, weil es dort zig Comileroptionen gibt.
Ubuntu gibts auch im Netz. ich bin damit sehr zufrieden.
Ich rate Dir: Datensicherheit und backups sind erste Bürgerpflicht täglich.
Guude
Fritz :D
ichisich
User
Beiträge: 134
Registriert: Freitag 1. Januar 2010, 11:52

Hi,

Du scheinst die Art von Import zu nutzen:

Code: Alles auswählen

import PyQt4
# und vor jede Instanziierung:
einString = QtCore.QString()
#oder
mainWindow = QtGui.Mainwindow()
#sowas schreiben !?
Herr Lunar macht aber:

Code: Alles auswählen

from PyQt4.QtCore import pyqtSignal, QObject, QTextStream, QTextCodec
from PyQt4.QtGui import (QApplication, QMainWindow, QWidget, QVBoxLayout,
                         QLineEdit, QPlainTextEdit, QAction, QStyle)
from PyQt4.QtNetwork import QTcpSocket, QTcpServer, QHostAddress

#die instanziierung wäre dann:
mainWindow = QMainwindow()
.
.
.
Kann das sein das Du das gemischt hast ?
Ansonsten gib mal mehr Quelltext mit den Imports etc.
3ff
User
Beiträge: 191
Registriert: Dienstag 22. Dezember 2009, 12:54
Wohnort: Odenwald Sued-Hessen

@ichisich,
gut möglich.
Ich ahb mir das Programm von Lunar runtergezogen es läuft.
Ein generelle Problem sind die Programmfragmente. Das ist aber kein Qt Poblem. Das gibts auch in C oder Pascal. WEnn man die Randbedingungen nicht mit angibt, gibts probleme.
Bei Programmfragmenten muß man vorsichtig sein.
Guude
Fritz :shock:
usingKarmicKoala
User
Beiträge: 27
Registriert: Samstag 28. November 2009, 15:58

also erstens:
ich benutze ubuntu lucid (deswegen ist mein username vll etwas veraltet) und habe ganz frisch python3 installiert

zweitens:
ich wollte nur den quelltext von lunar ausführen, hab da am import nichts geändert!
usingKarmicKoala
User
Beiträge: 27
Registriert: Samstag 28. November 2009, 15:58

aber allgemein was das thema des threads angeht:
am besten lernt man programmieren immernoch durch das angucken von gut kommentierten quelltexten!!!
3ff
User
Beiträge: 191
Registriert: Dienstag 22. Dezember 2009, 12:54
Wohnort: Odenwald Sued-Hessen

@usingKarmicKoala
alles richtig, aber Pyqt4 ist ein Riesenblock an code, der sehr viel Speicher frist. Also teilt man es auf in die einzelnen Unterpakete.
Fehlermeldungen wie oben erwähnt entstehen, wenn dein System die betreffende Bibliothek nicht hat.
Python3.0 ist schon die aktuelle Version. Aber Qt ist strenggenommen eine "andere" Baustelle.
Die Spiegelserver von Ubuntu sind auch bemüht, immer die aktuellen Pakete vorzuhalten aber das klappt nicht immer.
Ich komm grad vom Einkaufen zurück und wollte mal ein Beispiel bringen wo ein bestimmter connect-Aufruf geht und wo nicht.
Ich komm da noch drauf zurück.
Guude
Fritz :D
usingKarmicKoala
User
Beiträge: 27
Registriert: Samstag 28. November 2009, 15:58

achso^^ jetzt habs ichs verstanden...
3ff
User
Beiträge: 191
Registriert: Dienstag 22. Dezember 2009, 12:54
Wohnort: Odenwald Sued-Hessen

Sorry aber ich kann die datei nicht/noch nicht hochladen. Nochmal zu Deinem Problem zurück.
Besorg dir immer die aktuellste version von qt4. Da gibts auch unterschiedliche Pakete von Ubuntu.
Mit synaptic ist sichergestellt, das du immer die aktuellen (nicht unbedingt die aktuellsten) Versionen hast.
Ich will ein Icon laden und darstellen mit PyQt4, weil ich nicht mit Cpp arbeite.
-------------------------------
import sys
from PyQt4.Qt import *
ffflogoxpm = ["...bla","bla"]
class label (QMainWindow):
def __init__(self, *args):
QLabel._init__(self, *args)
self.lab1= QLabel("Fritz", self)
self.lab1= setMaximumWidth(100)
self.lab2= QLabel"--", self)
self.lab2= QIcon(QPixmap(ffflogoxpm))
def main (args):
das übliche...

Dies Programm bringt einen segmentation fault, der bösartig ist.
Was kann das sein?
Hängt das vieleicht mit der Bib PyQt4.Qt import *
denn da wird der ganz große Programmblock geladen.
Speicher ist hier genug da, ich hab 1 Siemens-Fujitsu mit 2 GByte hauptspeicher. Es kann auch 1 Compilerfehler sein, an Python liegt es bestimmt nicht.
Guude
Fritz :shock: :shock:
lunar

Formatierte Deinen Quelltext doch bitte anständig, so ist er unlesbar. Das Problem selbst ist, dass Basisklasse und Konstruktoraufruf nicht zusammen passen. Du rufst einfach irgendeinen Konstruktor auf, leitest aber von einer ganz anderen Klasse ab. Das kann ja nicht gut gehen, wie zum Teufel bist Du denn darauf gekommen, dass Du "QLabel.__init__()" aufrufen musst, wenn Du von "QMainWindow" ableitest? Davon abgesehen wird auch die Anzeige nicht korrekt sein, da Du keine Layoutverwaltung nutzt, und somit alle Steuerelemente an der obersten linken Ecke platziert werden. Zudem ist es nicht empfehlenswert, Steuerelemente direkt auf QMainWindow zu platzieren. Das wirft das Layout des Hauptfensters durcheinander. Zum Hinzufügen von Steuerelementen musst Du das ".centralWidget()" nutzen.

Im Übrigen gibt es keine Steigerung von "aktuell" in dem Zusammenhang, in dem Du dieses Wort verwendest. Entweder ist eine Bibliothek „aktuell“ oder sie ist nicht. Eine „aktuellste“ Bibliothek aber gibt es nicht ...
3ff
User
Beiträge: 191
Registriert: Dienstag 22. Dezember 2009, 12:54
Wohnort: Odenwald Sued-Hessen

@Lunar
ih werd das mal ändern und dann das irgendwie formatiert neu editieren.
Hochladen geht nicht?
Fritz
Benutzeravatar
cofi
Python-Forum Veteran
Beiträge: 4432
Registriert: Sonntag 30. März 2008, 04:16
Wohnort: RGFybXN0YWR0

[code=python][/code]
oder
[python][/python]

Oder die Pastebin nutzen: http://www.python-forum.de/pastebin.php
3ff
User
Beiträge: 191
Registriert: Dienstag 22. Dezember 2009, 12:54
Wohnort: Odenwald Sued-Hessen

@coli
Danke,
das Problem ist gelöst. Der Tip von Lunar war richtig.Man muß setPixmap von einer Funktion aus aufrufen.
Da macht der Qt-Compiler aber merkwürdige Sachen. ich will das Ergebnis mal zeigen, zumal gestern hab ich eine Stelle im Web gefunden, die behauptet, QPixmap wäre 1 bug von riverside.
Guude
Fritz 8)
3ff
User
Beiträge: 191
Registriert: Dienstag 22. Dezember 2009, 12:54
Wohnort: Odenwald Sued-Hessen

@cofi
krieg das mit der pastebin nicht hin.
jerch
User
Beiträge: 1669
Registriert: Mittwoch 4. März 2009, 14:19

@3ff:
Die Pixmap-Sache ist hier reichlich offtopic und besser in einem neuen Thread aufgehoben.

Ansonsten:
Was meinst Du mit "... von einer Funktion aus aufrufen"?
Was ist der "Qt-Compiler"?
Antworten