请Python大侠帮忙看看关于类变量与对象变量的区别?
本帖最后由 electrlife 于 2014-6-11 21:37 编辑from PyQt4 import QtGui
from PyQt4 import QtCore
from PyQt4.QtCore import pyqtSlot
from PyQt4.QtCore import QThread
from PyQt4.QtGui import QMainWindow
from Ui_SerialCom import Ui_MainWindow
class SerialComThread(QThread):
def __init__(self,parent=None):
super(SerialComThread,self).__init__(parent)
self.setTerminationEnabled(True)
self.rxDataSignal = QtCore.pyqtSignal()
def run(self):
while True:
self.rxDataSignal.emit()
self.msleep(500)
class SerialCom(QMainWindow, Ui_MainWindow):
def __init__(self, parent=None):
"""
Constructor
@param parent reference to the parent widget (QWidget)
"""
super().__init__(parent)
self.comThread = SerialComThread()
self.comThread.rxDataSignal.connect(self.on_comThread_rxDataSignal)
self.comThread.start()
@pyqtSlot()
def on_comThread_rxDataSignal(self):
pass
最近刚学PYTHON,想写个串口结果遇到上面的问题,一直无法解决,各位PYTHON高手帮忙看看!
具体的代码如上所示,并产生如上图所示的错误,但如果把self.rxDataSignal = QtCore.pyqtSignal()改成
类的静态属性则不会报错,比如这样写:
class SerialComThread(QThread):
rxDataSignal = QtCore.pyqtSignal()
def __init__(self,parent=None):
super(SerialComThread,self).__init__(parent)
self.setTerminationEnabled(True)
def run(self):
while True:
self.rxDataSignal.emit()
self.msleep(500)
普通的变量都可以继承,函数rxDataSignal就不能直接继承? gyd0317 发表于 2014-6-11 22:38
普通的变量都可以继承,函数rxDataSignal就不能直接继承?
不明觉厉!__@
楼主的问题我不懂,,
不过我之前用PyQt写过一个串口程序,给你做一下参考吧。。。
兔子哥改进了界面了啊,原先的有问题 XIVN1987 发表于 2014-6-12 08:48
楼主的问题我不懂,,
不过我之前用PyQt写过一个串口程序,给你做一下参考吧。。。
非常感谢,正好可以借鉴下!
只是这个错误不解决,总是不舒服! XIVN1987 发表于 2014-6-12 08:48
楼主的问题我不懂,,
不过我之前用PyQt写过一个串口程序,给你做一下参考吧。。。
看了下和你的思路差不多,也是使用一个线程来接收数据并发送到UI去显示,
你同样也使用了QtCore.pyqtSignal(),只不过你使用的是QtCore.Signal(),这个
应该是PYQT4里的吧,你使用的是类变量sigRecv = QtCore.Signal(str),如果我
也使用这种方式也不会报错,能不能帮忙把sigRecv = QtCore.Signal(str)改成
self.sigRecv = QtCore.Signal(str)的形式试下能否运行通过!由于使用的是PYTHON3
你的代码编译不过去!刚学也没能力去改你的代码!呵呵!就改一行代码即可,如下所示:
#串口收发线程
class SerThread(QtCore.QThread):
def __init__(self,parent=None):
super(SerThread,self).__init__(parent)
self.sigRecv = QtCore.Signal(str)
def run(self):
self.doRecv =True
while self.doRecv:
n = Ser.inWaiting()
if n > 0:
self.sigRecv.emit(Ser.read(n))
self.msleep(10)
def stop(self):
self.doRecv = False electrlife 发表于 2014-6-12 20:41
看了下和你的思路差不多,也是使用一个线程来接收数据并发送到UI去显示,
你同样也使用了QtCore.pyqtSign ...
改成实例变量后也报和你一样的错。。。我也不知道为什么,,去Google一下去。。
python忘得差不多了
这样的问题到OSC问吧..... A signal (specifically an unbound signal) is an attribute of a class that is a sub-class of QObject. When a signal is referenced as an attribute of an instance of the class then PyQt4 automatically binds the instance to the signal in order to create a bound signal. A bound signal has connect(), disconnect() and emit() methods
http://pyqt.sourceforge.net/Docs/PyQt4/new_style_signals_slots.html
页:
[1]