QT und Socket gleichzeitig

Python und das Qt-Toolkit, erstellen von GUIs mittels des Qt-Designers.
Antworten
coolerj
User
Beiträge: 49
Registriert: Sonntag 15. November 2009, 08:46

Hallo

Wenn ich ein QT erstelle und starte und dann bei einen Knopf drücke soll er mit einem Server verbinden allerdings geht das nicht und kommt
QCoreApplication::exec: The event loop is already running
Mein Code

Code: Alles auswählen

# -*- coding: utf-8 -*-
from PyQt4 import *
from PyQt4.Qt import *
from main_gui import Ui_MainWindow
import sys
import socket

class main(QMainWindow):
	def __init__(self, parent=None):
		QMainWindow.__init__(self, parent)
		self.ui = Ui_MainWindow()
		self.ui.setupUi(self)
		QObject.connect(self.ui.betaServer,SIGNAL("clicked()"),self.betaServer)
		QObject.connect(self.ui.verbinden,SIGNAL("clicked()"),self.verbinden)
		
	def betaServer(self):
		self.ui.lineEdit.setText("192.168.220.111")
		self.ui.spinBox.setValue(50000.0)
		
	def verbinden(self):
		ip = raw_input("IP-Adresse: ") 
		s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 
		s.connect((ip, 50000))

app = QApplication(sys.argv)
w = main()
w.show()
app.exec_() 
lunar

Das kommt bei diesem Quelltext? Zeige doch bitte ein Beispiel, mit dem man diesen Fehler nachvollziehen kann.

Im Allgemeinen ist es im Übrigen sinnvoller, die Klassen aus QtNetwork zu nutzen, wenn man Qt-Programme schreibt. Diese integrieren sich in die Ereignisschleife und bieten Signale und Slots.
coolerj
User
Beiträge: 49
Registriert: Sonntag 15. November 2009, 08:46

Wie meinst du das mit QtNetwork?
Ja aus diesem Code kommen die Fehler.
lunar

coolerj hat geschrieben:Wie meinst du das mit QtNetwork?
Du solltest statt "socket" eben die entsprechende Klasse aus QtNetwork benutzen.
Ja aus diesem Code kommen die Fehler.
Möglich, aber da ich den Quelltext in dieser Forum nicht ausführen kann, kann ich den Fehler nicht nachvollziehen und ergo auch nicht beheben.
philistion
User
Beiträge: 108
Registriert: Sonntag 7. Februar 2010, 14:16

Du solltest auch die notwendige Datei main_gui.py hinzufügen, da sonst keiner deinen Code testen (und korrigieren) kann. Ich will mir nämlich nicht die Mühe machen, diese selbst mit dem QT-Designer zu erstellen.
jerch
User
Beiträge: 1669
Registriert: Mittwoch 4. März 2009, 14:19

@coolerj:
Schau doch mal bitte nach, ob Du die main_gui.py-Datei mit dem Schalter -x erstellt hast. Damit fügt pyuic nämlich eine "main"-Sektion im Kompilat ein, in der schon eine QApplication() erzeugt wird. Falls ja, kannst Du den Teil einfach löschen.
Eine andere Idee habe ich hierzu auch nicht.
coolerj
User
Beiträge: 49
Registriert: Sonntag 15. November 2009, 08:46

Oh sry hier main_gui.py

Code: Alles auswählen

# -*- coding: utf-8 -*-

# Form implementation generated from reading ui file 'main.ui'
#
# Created: Sun Mar 21 10:03:21 2010
#      by: PyQt4 UI code generator 4.6.1
#
# WARNING! All changes made in this file will be lost!

from PyQt4 import QtCore, QtGui

class Ui_MainWindow(object):
    def setupUi(self, MainWindow):
        MainWindow.setObjectName("MainWindow")
        MainWindow.resize(357, 297)
        self.centralwidget = QtGui.QWidget(MainWindow)
        self.centralwidget.setObjectName("centralwidget")
        self.lineEdit = QtGui.QLineEdit(self.centralwidget)
        self.lineEdit.setGeometry(QtCore.QRect(70, 10, 291, 20))
        self.lineEdit.setObjectName("lineEdit")
        self.label = QtGui.QLabel(self.centralwidget)
        self.label.setGeometry(QtCore.QRect(20, 10, 61, 16))
        self.label.setObjectName("label")
        self.spinBox = QtGui.QSpinBox(self.centralwidget)
        self.spinBox.setGeometry(QtCore.QRect(70, 40, 61, 22))
        self.spinBox.setMinimum(49152)
        self.spinBox.setMaximum(50500)
        self.spinBox.setObjectName("spinBox")
        self.label_2 = QtGui.QLabel(self.centralwidget)
        self.label_2.setGeometry(QtCore.QRect(40, 40, 31, 21))
        self.label_2.setObjectName("label_2")
        self.lcdNumber = QtGui.QLCDNumber(self.centralwidget)
        self.lcdNumber.setGeometry(QtCore.QRect(70, 70, 71, 23))
        self.lcdNumber.setSmallDecimalPoint(False)
        self.lcdNumber.setProperty("value", 50000.0)
        self.lcdNumber.setObjectName("lcdNumber")
        self.label_3 = QtGui.QLabel(self.centralwidget)
        self.label_3.setGeometry(QtCore.QRect(0, 70, 71, 16))
        self.label_3.setObjectName("label_3")
        self.verbinden = QtGui.QPushButton(self.centralwidget)
        self.verbinden.setGeometry(QtCore.QRect(280, 70, 75, 23))
        self.verbinden.setObjectName("verbinden")
        self.line = QtGui.QFrame(self.centralwidget)
        self.line.setGeometry(QtCore.QRect(0, 90, 361, 16))
        self.line.setFrameShape(QtGui.QFrame.HLine)
        self.line.setFrameShadow(QtGui.QFrame.Sunken)
        self.line.setObjectName("line")
        self.betaServer = QtGui.QPushButton(self.centralwidget)
        self.betaServer.setGeometry(QtCore.QRect(0, 100, 75, 23))
        self.betaServer.setObjectName("betaServer")
        MainWindow.setCentralWidget(self.centralwidget)
        self.menubar = QtGui.QMenuBar(MainWindow)
        self.menubar.setGeometry(QtCore.QRect(0, 0, 357, 22))
        self.menubar.setObjectName("menubar")
        self.menuOffizelle_Server = QtGui.QMenu(self.menubar)
        self.menuOffizelle_Server.setObjectName("menuOffizelle_Server")
        MainWindow.setMenuBar(self.menubar)
        self.statusbar = QtGui.QStatusBar(MainWindow)
        self.statusbar.setObjectName("statusbar")
        MainWindow.setStatusBar(self.statusbar)
        self.actionBeta_Server = QtGui.QAction(MainWindow)
        self.actionBeta_Server.setObjectName("actionBeta_Server")
        self.menuOffizelle_Server.addAction(self.actionBeta_Server)
        self.menubar.addAction(self.menuOffizelle_Server.menuAction())

        self.retranslateUi(MainWindow)
        QtCore.QMetaObject.connectSlotsByName(MainWindow)

    def retranslateUi(self, MainWindow):
        MainWindow.setWindowTitle(QtGui.QApplication.translate("MainWindow", "MainWindow", None, QtGui.QApplication.UnicodeUTF8))
        self.label.setText(QtGui.QApplication.translate("MainWindow", "Server IP", None, QtGui.QApplication.UnicodeUTF8))
        self.label_2.setText(QtGui.QApplication.translate("MainWindow", "Port", None, QtGui.QApplication.UnicodeUTF8))
        self.label_3.setText(QtGui.QApplication.translate("MainWindow", "Standard Port", None, QtGui.QApplication.UnicodeUTF8))
        self.verbinden.setText(QtGui.QApplication.translate("MainWindow", "Verbinden", None, QtGui.QApplication.UnicodeUTF8))
        self.betaServer.setText(QtGui.QApplication.translate("MainWindow", "BetaServer", None, QtGui.QApplication.UnicodeUTF8))
        self.menuOffizelle_Server.setTitle(QtGui.QApplication.translate("MainWindow", "Offizelle Server", None, QtGui.QApplication.UnicodeUTF8))
        self.actionBeta_Server.setText(QtGui.QApplication.translate("MainWindow", "Beta Server", None, QtGui.QApplication.UnicodeUTF8))

Antworten