electrlife 发表于 2014-6-11 21:31:43

请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)


gyd0317 发表于 2014-6-11 22:38:17

普通的变量都可以继承,函数rxDataSignal就不能直接继承?

electrlife 发表于 2014-6-12 07:47:01

gyd0317 发表于 2014-6-11 22:38
普通的变量都可以继承,函数rxDataSignal就不能直接继承?

不明觉厉!__@

XIVN1987 发表于 2014-6-12 08:48:10


楼主的问题我不懂,,

不过我之前用PyQt写过一个串口程序,给你做一下参考吧。。。




pll19840511 发表于 2014-6-12 08:55:06

兔子哥改进了界面了啊,原先的有问题

electrlife 发表于 2014-6-12 20:28:35

XIVN1987 发表于 2014-6-12 08:48
楼主的问题我不懂,,

不过我之前用PyQt写过一个串口程序,给你做一下参考吧。。。


非常感谢,正好可以借鉴下!
只是这个错误不解决,总是不舒服!

electrlife 发表于 2014-6-12 20:41:42

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

XIVN1987 发表于 2014-6-12 22:01:58

electrlife 发表于 2014-6-12 20:41
看了下和你的思路差不多,也是使用一个线程来接收数据并发送到UI去显示,
你同样也使用了QtCore.pyqtSign ...


改成实例变量后也报和你一样的错。。。我也不知道为什么,,去Google一下去。。

Jordan?? 发表于 2014-6-12 22:17:12

python忘得差不多了
这样的问题到OSC问吧.....

ywhbn 发表于 2014-6-12 23:28:52

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]
查看完整版本: 请Python大侠帮忙看看关于类变量与对象变量的区别?