Seite 1 von 1
QT und Socket gleichzeitig
Verfasst: Sonntag 21. März 2010, 11:36
von coolerj
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_()
Verfasst: Sonntag 21. März 2010, 12:26
von 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.
Verfasst: Sonntag 21. März 2010, 12:33
von coolerj
Wie meinst du das mit QtNetwork?
Ja aus diesem Code kommen die Fehler.
Verfasst: Sonntag 21. März 2010, 13:26
von 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.
Verfasst: Sonntag 21. März 2010, 14:24
von philistion
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.
Verfasst: Sonntag 21. März 2010, 16:28
von jerch
@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.
Verfasst: Sonntag 21. März 2010, 16:56
von coolerj
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))