Note that there are some explanatory texts on larger screens.

plurals
  1. PONot show anything from setText() or other showing method in pyqt4 inside of threading class
    primarykey
    data
    text
    <p>I write a simple socket app with pyqt4 and threading in python3.3, but i have problem with running Qt classes command like show a message in label or anything, only python code works properly.</p> <p>Not show anything to S_label in my gui,</p> <p>I use 2 ways to show any message on S_label but neither of ways not work,</p> <ol> <li>self._ui</li> <li>self.ui</li> </ol> <p>in code :</p> <ol> <li>self.ui.S_label.setText("test !")</li> <li>self._ui.S_label.setText("test !")</li> <li>self.ui.S_label.setText("{0}:{1} is connected.".format(addr, remoport))</li> </ol> <p>for both two ways <code>print</code> works well:</p> <ol> <li>print(self._ui)</li> <li>print(self.ui)</li> </ol> <p><code>print</code> output :</p> <p>-<code>&lt;imigui.Ui_MainWindow object at 0x7fe0746cac10&gt;</code></p> <p>-<code>&lt;imigui.Ui_MainWindow object at 0x7fe0746d5d90&gt;</code></p> <p>What I'm doing wrong?</p> <p>my code :</p> <pre><code>from PyQt4 import QtCore, QtGui from imigui import Ui_MainWindow class imiserv(QtGui.QMainWindow): def __init__(self, parent=None): QtGui.QWidget.__init__(self, parent) self.ui = Ui_MainWindow() self.ui.setupUi(self) self.ui.Sport_lineEdit.setMaxLength(5) self.ui.Sconnect_pushButton.clicked.connect(self.serv) def serv(self): self.sersock= socket.socket(socket.AF_INET, socket.SOCK_STREAM) self.sersock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) self.host= str(self.ui.Sip_lineEdit.text()) self.port= int(self.ui.Sport_lineEdit.text()) MY_LOCK = threading.Lock() class CountT(threading.Thread, imiserv): def __init__(self, ui, ser): super().__init__() imiserv.__init__(self) self._sersock= ser self._ui= ui print(self._ui) print(self.ui) self.ui.S_label.setText("test !") self._ui.S_label.setText("test !") def run(self): MY_LOCK.acquire() while True: cliconn, (addr, remoport)= self._sersock.accept() self.cstr= cliconn.recv(1024) self.ui.S_label.setText("{0}:{1} is connected.".format(addr, remoport)) cliconn.close() print(self.cstr) MY_LOCK.release() try : self.sersock.bind((self.host, self.port)) self.sersock.listen(5) a= CountT(self.ui, self.sersock) a.daemon= True # for exit from thread when close gui a.start() except socket.error as err: self.ui.S_label.setText(err) </code></pre> <hr> <p><strong>Edit(new problem)</strong> :</p> <p>I have a new problem with your way:i added a qtextedit to my gui and when i want to settext to it in my code <code>Segmentation fault</code> happened and app crashed ,</p> <p>error :</p> <pre><code>QObject: Cannot create children for a parent that is in a different thread. (Parent is QTextDocument(0x15c4460), parent's thread is QThread(0xfeb570), current thread is QThread(0x15d3900) Segmentation fault </code></pre> <p>My Code:</p> <pre><code>from PyQt4 import QtCore, QtGui from imigui import Ui_MainWindow class imiserv(QtGui.QMainWindow): def __init__(self, parent=None): QtGui.QWidget.__init__(self, parent) self.ui = Ui_MainWindow() self.ui.setupUi(self) self.ui.Sport_lineEdit.setMaxLength(5) self.ui.Sconnect_pushButton.clicked.connect(self.serv) def serv(self): self.sersock= socket.socket(socket.AF_INET, socket.SOCK_STREAM) self.sersock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) self.host= str(self.ui.Sip_lineEdit.text()) self.port= int(self.ui.Sport_lineEdit.text()) MY_LOCK = threading.Lock() class CountT(threading.Thread): def __init__(self, label, ser, qtext): super().__init__() self._sersock= ser self._uilabel= label self._uiClog= qtext def run(self): MY_LOCK.acquire() while True: cliconn, (addr, remoport)= self._sersock.accept() self.cstr= cliconn.recv(1024) self._uilabel.setText("{0}:{1} is connected.".format(addr, remoport)) cliconn.close() print(self.cstr) self._uilabel.setText(self.cstr) # it's ok! self._uiClog.setText(msg) # Segmentation fault MY_LOCK.release() try : self.sersock.bind((self.host, self.port)) self.sersock.listen(5) a= CountT(label= self.ui.S_label, ser= self.sersock, qtext= self.ui.Clog_textEdit) a.daemon= True # for exit from thread when close gui a.start() self.ui.S_label.setText("Connected !") except socket.error as err: self.ui.S_label.setText(err) # it's ok ! self.ui.self.ui.Clog_textEdit.setText(err) # it's ok ! </code></pre> <p>Why ?</p> <hr> <p><strong>Edit(new problem2)</strong> :</p> <p>this is my code :</p> <p>from PyQt4 import QtCore, QtGui from imigui import Ui_MainWindow</p> <p>class imiserv(QtGui.QMainWindow):</p> <pre><code>send_msg = pyqtSignal('QString', 'QString') def __init__(self, parent=None): QtGui.QWidget.__init__(self, parent) self.ui = Ui_MainWindow() self.ui.setupUi(self) self.ui.Sport_lineEdit.setMaxLength(5) self.ui.Sconnect_pushButton.clicked.connect(self.serv) self.send_msg.connect(self.write_msg) def write_msg(self, lbl_msg= None, txt_msg= None): if lbl_msg: self.ui.C_label.setText(lbl_msg) if txt_msg: self.ui.Clog_textEdit.setText(txt_msg) def serv(self): MY_LOCK = threading.Lock() class CountT(threading.Thread): def __init__(self, parent): threading.Thread.__init__(self) self._parent= parent def run(self): MY_LOCK.acquire() self._parent.send_msg.emit("Waiting connections","") while True: cliconn, (addr, remoport)= self._parent.clis.accept() clirecmsg= str(cliconn.recv(1024) self._parent.send_msg.emit("{0}:{1} is connected.".format(addr, remoport), "{0}:{1}".format(addr, remoport) cliconn.close() MY_LOCK.release() try : self.clis= socket.socket(socket.AF_INET, socket.SOCK_STREAM) self.clis.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) clierhost= str(self.ui.Sip_lineEdit.text()) clierport= int(self.ui.Sport_lineEdit.text()) self.clis.bind((clierhost, clierport)) self.clis.listen(5) a= CountT(self) a.daemon= True a.start() except socket.error as err: err= str(err) print(err) </code></pre> <p>and this is error that happened decussate, i should press button twice for get event for first time error showed in linux and nothing in windows and for second press event is happened,(this error show only in linux os.)</p> <pre><code>Exception in thread Thread-1: Traceback (most recent call last): File "/usr/lib/python3.3/threading.py", line 637, in _bootstrap_inner self.run() File "imiclilap.py", line 34, in run cliconn, (addr, remoport)= self._parent.clis.accept() File "/usr/lib/python3.3/socket.py", line 135, in accept fd, addr = self._accept() OSError: [Errno 22] Invalid argument Exception in thread Thread-2: Traceback (most recent call last): File "/usr/lib/python3.3/threading.py", line 637, in _bootstrap_inner self.run() File "imiclilap.py", line 34, in run cliconn, (addr, remoport)= self._parent.clis.accept() File "/usr/lib/python3.3/socket.py", line 135, in accept fd, addr = self._accept() OSError: [Errno 22] Invalid argument </code></pre>
    singulars
    1. This table or related slice is empty.
    plurals
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload