Patrick,

Thanks for the advice! So I added that string parameter(or char array) to
the Top_Block.py file

the new line looks like this:self.ACK_Text_Sanitize_0 =
ACK.Text_Sanitize("String").

When I run "python top_block.py" this error occurs:

comm1@comm1:~/Logan/Thesis$ python top_block.py
Traceback (most recent call last):
  File "top_block.py", line 92, in <module>
    tb = top_block()
  File "top_block.py", line 65, in __init__
    self.ACK_Text_Sanitize_0 = ACK.Text_Sanitize("String")
  File "/usr/local/lib/python2.7/dist-packages/ACK/ACK_swig.py", line 399,
in make
    return _ACK_swig.Text_Sanitize_make(*args, **kwargs)
RuntimeError: attempt to set_msg_handler() on bad input message port!


My XML file can be found here:
https://gist.github.com/loganwashbourne/68367a93b7fe9bf28bce

So the RuntimeError seems to be the problem, I'm leaning towards the idea
that I am not handling the PMT's correctly. Thoughts?

Richard,

I appreciate the advice, I've been pretty diligent about using sudo
ldconfig after I read that not using it could create problems. All advice
helps!



Logan Washbourne
Electrical Engineering Graduate Student
(Electromagnetics)


On Fri, Aug 21, 2015 at 4:37 PM, Patrick Sathyanathan <wp...@hotmail.com>
wrote:

> I see the following in the output of "nm -C -u":
>
>  U gr::ACK::Text_Sanitize_impl::forecast(int, std::vector<int,
> std::allocator<int> >&)
>
> This was the undefined symbol that was causing the module import to
> fail... as you have discovered yourself. Now that the module import has
> succeeded you are seeing a different error.
>
> This error is because of the following in the generated python file:
>
>    self.ACK_Text_Sanitize_0 = ACK.Text_Sanitize()
>
> Note that this will invoke "Text_Sanitize::make" which expects a "char *
> message" argument. That causes the error message below. For some reason GRC
> is not adding that parameter in the above statement. Did you add a
> declaration for that parameter in the XML file ?
>
> To verify that the XML file is the issue just try editing the generated
> python file and changing the above to:
>
>    self.ACK_Text_Sanitize_0 = ACK.Text_Sanitize("some string")
>
> and running it from the command line (run "python top_block.py" in a
> terminal window).
>
> --Patrick
>
> ------------------------------
> Date: Thu, 20 Aug 2015 11:08:56 -0500
> From: lwas...@ostatemail.okstate.edu
> To: discuss-gnuradio@gnu.org
>
> Subject: Re: [Discuss-gnuradio] OOT Module Attribute Error module object
> has no attribute 'blockname'
>
> Nathan and Patrick,
>
> Thanks for the tips!
>
> I started with running: nm -C -u libgnuradio-<modulename>.so
>
> and the results of that can be found here:
> https://gist.github.com/loganwashbourne under the *nm -C -u
> libgnuradio-<modulename>.so*
> <https://gist.github.com/loganwashbourne/3bb90d787308b45211d0> file. (I
> think github thinks I'm a robot so I can't link to the direct page yet).
>
> I'll be honest, I'm not really sure what I'm looking at in this return, I
> do see some error statements but I'm not sure if they are just stating how
> it would handle an error or if it is an actual error.
>
> I really don't think I have any callbacks in my XML code, I just reference
> certain input variables in the XML code.
>
> Next, the ACK_swig.i file can be found here :
> https://gist.github.com/loganwashbourne under the same file name. I
> checked it against the gr-tutorial swig file and the only difference was
> that the ACK_swig.i file included a magic2 function call for each of my OOT
> blocks(check and Text_Sanitize), while the gr-tutorial didn't.
>
> Last thing, I realized that I am creating the forecast function in the
> Text_Sanitize_impl.h file but not referencing it it the .cc file (I
> commented it out). I tried commenting out the void deceleration of the
> forecast function in the .h file but then I get a new error when I try to
> run the grc file(which is just a constant int source connected to my
> Text_Sanitize block, which is connected the the message debug "print" port).
>
> The new error is :
>
> Traceback (most recent call last):
>   File "/home/comm1/Logan/Thesis/top_block.py", line 92, in <module>
>     tb = top_block()
>   File "/home/comm1/Logan/Thesis/top_block.py", line 65, in __init__
>     self.ACK_Text_Sanitize_0 = ACK.Text_Sanitize()
>   File "/usr/local/lib/python2.7/dist-packages/ACK/ACK_swig.py", line 399,
> in make
>     return _ACK_swig.Text_Sanitize_make(*args, **kwargs)
> TypeError: Required argument 'message' (pos 1) not found
>
> I do apologize for the long questions, if any of you feel like I need to
> spend more time looking into this myself before asking the mailing list,
> please don't hesitate to mention it.
>
>
>
> Logan Washbourne
> Electrical Engineering Graduate Student
> (Electromagnetics)
>
>
> On Wed, Aug 19, 2015 at 5:06 PM, Patrick Sathyanathan <wp...@hotmail.com>
> wrote:
>
> Hi Logan,
>
> I have faced the same error twice recently in my OOT module and finally
> tracked it down to two causes. The basic reason for the 'object has no
> attribute' error is that Python's import of your module failed. In the two
> cases that I saw it was due to undefined symbols in the shared library for
> my module. My module was called 'tutorial' so the corresponding library is
> libgnuradio-tutorial.so and you can find it in the .../build/lib directory.
> To find out the undefined symbols do the following:
>
> nm -C -u libgnuradio-<modulename>.so
>
> and search for method names in your class. So if your class is 'MyClass'
> you could do:
>
> nm -C -u libgnuradio-<modulename>.so | grep MyClass
>
> The two cases that I ran into were:
>
> 1. A non-virtual method in my implementation class was undefined because I
> had forgotten to prefix the method definition with the class name. So the
> .cc file had "void foo(...)" instead of "void MyClass_impl::foo(...)" and
> foo was compiled as a ordinary function. Then the command above will report
> "MyClass_impl::foo" as undefined.
>
> 2. The second case I ran into was with defining callbacks in the XML file.
> If you do then you will need to add matching virtual function declarations
> in the header file. This is needed for SWIG to work correctly. For my case
> the callback "foo" needed a virtual function declaration "virtual
> <sometype> foo(...) = 0;" in the actual class declaration (not the ..._impl
> version) in the header file.
>
> Do you have callbacks ? If this is the issue then you should do a "make
> clean" before running make again to force SWIG to run.
>
> Hope this helps.
>
> --Patrick
>
> ------------------------------
> Date: Wed, 19 Aug 2015 14:51:27 -0400
> From: n...@ostatemail.okstate.edu
> To: lwas...@ostatemail.okstate.edu
> CC: discuss-gnuradio@gnu.org
> Subject: Re: [Discuss-gnuradio] OOT Module Attribute Error module object
> has no attribute 'blockname'
>
>
> My gut is telling me this is a swig problem. I don't know that it's
> frowned upon, but it's not easy to read without some kind of highlighting
> that we'd get from github or a gist with files. If I'm correct we'd also
> need to see swig/ACK.i (probably missing an include and/or gr swig block
> magic. compare to tutorial swig for sanity check)
>
> On Wed, Aug 19, 2015 at 10:38 AM, Washbourne, Logan <
> lwas...@ostatemail.okstate.edu> wrote:
>
> Hello all,
>
> I know this question has been asked before, several times, but I didn't
> find a solution that allowed me to use my OOT blocks without running into
> the error stated in the subject of this email.
>
> I scoured through this webpage(
> http://gnuradio.org/redmine/projects/gnuradio/wiki/OutOfTreeModulesConfig)
> and tried adding:
> set(GR_REQUIRED_COMPONENTS RUNTIME PMT)
>
> to my top level CMakeLists.txt file, because I am using PMT objects in my
> block, but that didn't get rid of the error.
>
> The full error thrown is this:
>
> Executing: "/home/comm1/Logan/Thesis/top_block.py"
>
> Traceback (most recent call last):
>   File "/home/comm1/Logan/Thesis/top_block.py", line 92, in <module>
>     tb = top_block()
>   File "/home/comm1/Logan/Thesis/top_block.py", line 65, in __init__
>     self.ACK_Text_Sanitize_0 = ACK.Text_Sanitize()
> AttributeError: 'module' object has no attribute 'Text_Sanitize'
>
>
> I looked on the mailing list for that last line error and it pointed me to
> doing what I mentioned above with the CMakeLists.txt file, but could it be
> an actual problem with the top_block.py file?
>
> In the addendum is all of the files I could think would be necessary for
> someone to look at if they chose to, if including this much text is frowned
> upon, please let me know.
>
>
> Addendum:
>
> Text_Sanitize_impl.cc
>
> *****************************************************************************
> #ifdef HAVE_CONFIG_H
> #include "config.h"
> #endif
>
> #include <gnuradio/io_signature.h>
> #include "Text_Sanitize_impl.h"
> #include <pmt/pmt.h>
> #include <stdio.h>
> #include <string>
> #include <iostream>
> #include <cstdio>
>
> namespace gr {
>   namespace ACK {
>
>     Text_Sanitize::sptr
>     Text_Sanitize::make(char* message)
>     {
>       return gnuradio::get_initial_sptr
>         (new Text_Sanitize_impl(message));
>     }
>
>     void
>     Text_Sanitize_impl::print_message(pmt::pmt_t d_message)
>     {
>     pmt::print(d_message);
>     }
>
>
>
>
>     /*
>     void
>     Text_Sanitize_impl::forecast (int noutput_items, gr_vector_int
> &ninput_items_required)
>     {
>          <+forecast+> e.g. ninput_items_required[0] = noutput_items
>     }
>     */
>     int
>     Text_Sanitize_impl::general_work (int noutput_items,
>                        gr_vector_int &ninput_items,
>                        gr_vector_const_void_star &input_items,
>                        gr_vector_void_star &output_items)
>     {
>         const int *in = (int *) input_items[0];
>         pmt::pmt_t *out = (pmt::pmt_t *) output_items[0];
>
>
>     d_out_msg = pmt::string_to_symbol(d_message);
>     //for(int i = 0; i<strlen(d_message); i++)
>     //{
>     //    pmt::vector_set(d_out_msg,i,d_message[i]);
>     //}
>
>         // Do <+signal processing+>
>         // Tell runtime system how many input items we consumed on
>         // each input stream.
>         consume_each (noutput_items);
>
>         // Tell runtime system how many output items we produced.
>         return noutput_items;
>     }
>
>     /*
>      * The private constructor
>      */
>     Text_Sanitize_impl::Text_Sanitize_impl(char* message)
>       : gr::block("Text_Sanitize",
>               gr::io_signature::make(1, 1, sizeof(int)),
>               gr::io_signature::make(1, 1, sizeof(pmt::pmt_t))),
>         d_out_msg(pmt::string_to_symbol(std::string(""))),
>         d_message(message)
>     {
>
>     message_port_register_out(pmt::mp("print_message"));
>     set_msg_handler(pmt::mp("print"),
> boost::bind(&Text_Sanitize_impl::print_message, this, _1));
>     }
>
>     /*
>      * Our virtual destructor.
>      */
>     Text_Sanitize_impl::~Text_Sanitize_impl()
>     {
>     }
>
>
>   } /* namespace ACK */
> } /* namespace gr */
>
>
> *****************************************************************************
>
> Text_Sanitize_impl.h
>
> ******************************************************************************
> #ifndef INCLUDED_ACK_TEXT_SANITIZE_IMPL_H
> #define INCLUDED_ACK_TEXT_SANITIZE_IMPL_H
>
> #include <ACK/Text_Sanitize.h>
> #include <gnuradio/block.h>
> #include <gnuradio/thread/thread.h>
> #include <pmt/pmt.h>
>
> namespace gr {
>   namespace ACK {
>
>     class Text_Sanitize_impl : public Text_Sanitize
>     {
>      private:
>       // Nothing to declare in this block.
>     pmt::pmt_t d_out_msg;
>     char* d_message;
>     void print_message(pmt::pmt_t d_message);
>
>
>      public:
>       Text_Sanitize_impl(char* message);
>       ~Text_Sanitize_impl();
>
>       // Where all the action really happens
>       void forecast (int noutput_items, gr_vector_int
> &ninput_items_required);
>
>       int general_work(int noutput_items,
>                gr_vector_int &ninput_items,
>                gr_vector_const_void_star &input_items,
>                gr_vector_void_star &output_items);
>     };
>
>   } // namespace ACK
> } // namespace gr
>
> #endif /* INCLUDED_ACK_TEXT_SANITIZE_IMPL_H */
>
>
> *****************************************************************************
>
> Text_Sanitize.h
>
> ****************************************************************************
> #ifndef INCLUDED_ACK_TEXT_SANITIZE_H
> #define INCLUDED_ACK_TEXT_SANITIZE_H
>
> #include <ACK/api.h>
> #include <gnuradio/block.h>
>
> namespace gr {
>   namespace ACK {
>
>     /*!
>      * \brief <+description of block+>
>      * \ingroup ACK
>      *
>      */
>     class ACK_API Text_Sanitize : virtual public gr::block
>     {
>      public:
>       typedef boost::shared_ptr<Text_Sanitize> sptr;
>
>       /*!
>        * \brief Return a shared_ptr to a new instance of
> ACK::Text_Sanitize.
>        *
>        * To avoid accidental use of raw pointers, ACK::Text_Sanitize's
>        * constructor is in a private implementation
>        * class. ACK::Text_Sanitize::make is the public interface for
>        * creating new instances.
>        */
>       static sptr make(char* message);
>     };
>
>   } // namespace ACK
> } // namespace gr
>
> #endif /* INCLUDED_ACK_TEXT_SANITIZE_H */
>
> ****************************************************************************
>
> Top Level CMakeLists.txt
> ***************************************************************************
> ########################################################################
> # Project setup
> ########################################################################
> cmake_minimum_required(VERSION 2.6)
> project(gr-ACK CXX C)
> enable_testing()
>
> #select the release build type by default to get optimization flags
> if(NOT CMAKE_BUILD_TYPE)
>    set(CMAKE_BUILD_TYPE "Release")
>    message(STATUS "Build type not specified: defaulting to release.")
> endif(NOT CMAKE_BUILD_TYPE)
> set(CMAKE_BUILD_TYPE ${CMAKE_BUILD_TYPE} CACHE STRING "")
>
> #make sure our local CMake Modules path comes first
> list(INSERT CMAKE_MODULE_PATH 0 ${CMAKE_SOURCE_DIR}/cmake/Modules)
>
> ########################################################################
> # Compiler specific setup
> ########################################################################
> if(CMAKE_COMPILER_IS_GNUCXX AND NOT WIN32)
>     #http://gcc.gnu.org/wiki/Visibility
>     add_definitions(-fvisibility=hidden)
> endif()
>
> ########################################################################
> # Find boost
> ########################################################################
> if(UNIX AND EXISTS "/usr/lib64")
>     list(APPEND BOOST_LIBRARYDIR "/usr/lib64") #fedora 64-bit fix
> endif(UNIX AND EXISTS "/usr/lib64")
> set(Boost_ADDITIONAL_VERSIONS
>     "1.35.0" "1.35" "1.36.0" "1.36" "1.37.0" "1.37" "1.38.0" "1.38"
> "1.39.0" "1.39"
>     "1.40.0" "1.40" "1.41.0" "1.41" "1.42.0" "1.42" "1.43.0" "1.43"
> "1.44.0" "1.44"
>     "1.45.0" "1.45" "1.46.0" "1.46" "1.47.0" "1.47" "1.48.0" "1.48"
> "1.49.0" "1.49"
>     "1.50.0" "1.50" "1.51.0" "1.51" "1.52.0" "1.52" "1.53.0" "1.53"
> "1.54.0" "1.54"
>     "1.55.0" "1.55" "1.56.0" "1.56" "1.57.0" "1.57" "1.58.0" "1.58"
> "1.59.0" "1.59"
>     "1.60.0" "1.60" "1.61.0" "1.61" "1.62.0" "1.62" "1.63.0" "1.63"
> "1.64.0" "1.64"
>     "1.65.0" "1.65" "1.66.0" "1.66" "1.67.0" "1.67" "1.68.0" "1.68"
> "1.69.0" "1.69"
> )
> find_package(Boost "1.35" COMPONENTS filesystem system)
>
> if(NOT Boost_FOUND)
>     message(FATAL_ERROR "Boost required to compile ACK")
> endif()
>
> ########################################################################
> # Install directories
> ########################################################################
> include(GrPlatform) #define LIB_SUFFIX
> set(GR_RUNTIME_DIR      bin)
> set(GR_LIBRARY_DIR      lib${LIB_SUFFIX})
> set(GR_INCLUDE_DIR      include/ACK)
> set(GR_DATA_DIR         share)
> set(GR_PKG_DATA_DIR     ${GR_DATA_DIR}/${CMAKE_PROJECT_NAME})
> set(GR_DOC_DIR          ${GR_DATA_DIR}/doc)
> set(GR_PKG_DOC_DIR      ${GR_DOC_DIR}/${CMAKE_PROJECT_NAME})
> set(GR_CONF_DIR         etc)
> set(GR_PKG_CONF_DIR     ${GR_CONF_DIR}/${CMAKE_PROJECT_NAME}/conf.d)
> set(GR_LIBEXEC_DIR      libexec)
> set(GR_PKG_LIBEXEC_DIR  ${GR_LIBEXEC_DIR}/${CMAKE_PROJECT_NAME})
> set(GRC_BLOCKS_DIR      ${GR_PKG_DATA_DIR}/grc/blocks)
>
> ########################################################################
> # On Apple only, set install name and use rpath correctly, if not already
> set
> ########################################################################
> if(APPLE)
>     if(NOT CMAKE_INSTALL_NAME_DIR)
>         set(CMAKE_INSTALL_NAME_DIR
>             ${CMAKE_INSTALL_PREFIX}/${GR_LIBRARY_DIR} CACHE
>             PATH "Library Install Name Destination Directory" FORCE)
>     endif(NOT CMAKE_INSTALL_NAME_DIR)
>     if(NOT CMAKE_INSTALL_RPATH)
>         set(CMAKE_INSTALL_RPATH
>             ${CMAKE_INSTALL_PREFIX}/${GR_LIBRARY_DIR} CACHE
>             PATH "Library Install RPath" FORCE)
>     endif(NOT CMAKE_INSTALL_RPATH)
>     if(NOT CMAKE_BUILD_WITH_INSTALL_RPATH)
>         set(CMAKE_BUILD_WITH_INSTALL_RPATH ON CACHE
>             BOOL "Do Build Using Library Install RPath" FORCE)
>     endif(NOT CMAKE_BUILD_WITH_INSTALL_RPATH)
> endif(APPLE)
>
> ########################################################################
> # Find gnuradio build dependencies
> ########################################################################
> find_package(CppUnit)
> find_package(Doxygen)
>
> # Search for GNU Radio and its components and versions. Add any
> # components required to the list of GR_REQUIRED_COMPONENTS (in all
> # caps such as FILTER or FFT) and change the version to the minimum
> # API compatible version required.
> set(GR_REQUIRED_COMPONENTS RUNTIME PMT STRING)
> find_package(Gnuradio "3.7.2" REQUIRED)
>
> if(NOT CPPUNIT_FOUND)
>     message(FATAL_ERROR "CppUnit required to compile ACK")
> endif()
>
> ########################################################################
> # Setup doxygen option
> ########################################################################
> if(DOXYGEN_FOUND)
>     option(ENABLE_DOXYGEN "Build docs using Doxygen" ON)
> else(DOXYGEN_FOUND)
>     option(ENABLE_DOXYGEN "Build docs using Doxygen" OFF)
> endif(DOXYGEN_FOUND)
>
> ########################################################################
> # Setup the include and linker paths
> ########################################################################
> include_directories(
>     ${CMAKE_SOURCE_DIR}/lib
>     ${CMAKE_SOURCE_DIR}/include
>     ${CMAKE_BINARY_DIR}/lib
>     ${CMAKE_BINARY_DIR}/include
>     ${Boost_INCLUDE_DIRS}
>     ${CPPUNIT_INCLUDE_DIRS}
>     ${GNURADIO_RUNTIME_INCLUDE_DIRS}
>     ${GNURADIO_ALL_INCLUDE_DIRS}
> )
>
> link_directories(
>     ${Boost_LIBRARY_DIRS}
>     ${CPPUNIT_LIBRARY_DIRS}
>     ${GNURADIO_RUNTIME_LIBRARY_DIRS}
> )
>
> # Set component parameters
> set(GR_ACK_INCLUDE_DIRS ${CMAKE_CURRENT_SOURCE_DIR}/include CACHE INTERNAL
> "" FORCE)
> set(GR_ACK_SWIG_INCLUDE_DIRS ${CMAKE_CURRENT_SOURCE_DIR}/swig CACHE
> INTERNAL "" FORCE)
>
> ########################################################################
> # Create uninstall target
> ########################################################################
> configure_file(
>     ${CMAKE_SOURCE_DIR}/cmake/cmake_uninstall.cmake.in
>     ${CMAKE_CURRENT_BINARY_DIR}/cmake_uninstall.cmake
> @ONLY)
>
> add_custom_target(uninstall
>     ${CMAKE_COMMAND} -P ${CMAKE_CURRENT_BINARY_DIR}/cmake_uninstall.cmake
> )
>
> ########################################################################
> # Add subdirectories
> ########################################################################
> add_subdirectory(include/ACK)
> add_subdirectory(lib)
> add_subdirectory(swig)
> add_subdirectory(python)
> add_subdirectory(grc)
> add_subdirectory(apps)
> add_subdirectory(docs)
>
> ########################################################################
> # Install cmake search helper for this library
> ########################################################################
> if(NOT CMAKE_MODULES_DIR)
>   set(CMAKE_MODULES_DIR lib${LIB_SUFFIX}/cmake)
> endif(NOT CMAKE_MODULES_DIR)
>
> install(FILES cmake/Modules/ACKConfig.cmake
>     DESTINATION ${CMAKE_MODULES_DIR}/ACK
> )
> ***************************************************************************
>
> top_block.py
> ***************************************************************************
> #!/usr/bin/env python2
> ##################################################
> # GNU Radio Python Flow Graph
> # Title: Top Block
> # Generated: Tue Aug 18 11:02:34 2015
> ##################################################
>
> if __name__ == '__main__':
>     import ctypes
>     import sys
>     if sys.platform.startswith('linux'):
>         try:
>             x11 = ctypes.cdll.LoadLibrary('libX11.so')
>             x11.XInitThreads()
>         except:
>             print "Warning: failed to XInitThreads()"
>
> from PyQt4 import Qt
> from gnuradio import analog
> from gnuradio import blocks
> from gnuradio import eng_notation
> from gnuradio import gr
> from gnuradio.eng_option import eng_option
> from gnuradio.filter import firdes
> from optparse import OptionParser
> import ACK
> import sys
>
>
> class top_block(gr.top_block, Qt.QWidget):
>
>     def __init__(self):
>         gr.top_block.__init__(self, "Top Block")
>         Qt.QWidget.__init__(self)
>         self.setWindowTitle("Top Block")
>         try:
>              self.setWindowIcon(Qt.QIcon.fromTheme('gnuradio-grc'))
>         except:
>              pass
>         self.top_scroll_layout = Qt.QVBoxLayout()
>         self.setLayout(self.top_scroll_layout)
>         self.top_scroll = Qt.QScrollArea()
>         self.top_scroll.setFrameStyle(Qt.QFrame.NoFrame)
>         self.top_scroll_layout.addWidget(self.top_scroll)
>         self.top_scroll.setWidgetResizable(True)
>         self.top_widget = Qt.QWidget()
>         self.top_scroll.setWidget(self.top_widget)
>         self.top_layout = Qt.QVBoxLayout(self.top_widget)
>         self.top_grid_layout = Qt.QGridLayout()
>         self.top_layout.addLayout(self.top_grid_layout)
>
>         self.settings = Qt.QSettings("GNU Radio", "top_block")
>         self.restoreGeometry(self.settings.value("geometry").toByteArray())
>
>         ##################################################
>         # Variables
>         ##################################################
>         self.samp_rate = samp_rate = 32000
>
>         ##################################################
>         # Blocks
>         ##################################################
>         self.blocks_message_debug_0 = blocks.message_debug()
>         self.analog_const_source_x_0 = analog.sig_source_i(0,
> analog.GR_CONST_WAVE, 0, 0, 2)
>         self.ACK_Text_Sanitize_0 = ACK.Text_Sanitize()
>
>         ##################################################
>         # Connections
>         ##################################################
>         self.msg_connect((self.ACK_Text_Sanitize_0, 'out'),
> (self.blocks_message_debug_0, 'print'))
>         self.connect((self.analog_const_source_x_0, 0),
> (self.ACK_Text_Sanitize_0, 0))
>
>     def closeEvent(self, event):
>         self.settings = Qt.QSettings("GNU Radio", "top_block")
>         self.settings.setValue("geometry", self.saveGeometry())
>         event.accept()
>
>     def get_samp_rate(self):
>         return self.samp_rate
>
>     def set_samp_rate(self, samp_rate):
>         self.samp_rate = samp_rate
>
>
> if __name__ == '__main__':
>     parser = OptionParser(option_class=eng_option, usage="%prog:
> [options]")
>     (options, args) = parser.parse_args()
>     from distutils.version import StrictVersion
>     if StrictVersion(Qt.qVersion()) >= StrictVersion("4.5.0"):
>
> Qt.QApplication.setGraphicsSystem(gr.prefs().get_string('qtgui','style','raster'))
>     qapp = Qt.QApplication(sys.argv)
>     tb = top_block()
>     tb.start()
>     tb.show()
>
>     def quitting():
>         tb.stop()
>         tb.wait()
>     qapp.connect(qapp, Qt.SIGNAL("aboutToQuit()"), quitting)
>     qapp.exec_()
>     tb = None  # to clean up Qt widgets
> ***************************************************************************
>
> Logan Washbourne
> Electrical Engineering Graduate Student
> (Electromagnetics)
>
>
> _______________________________________________
> Discuss-gnuradio mailing list
> Discuss-gnuradio@gnu.org
> https://lists.gnu.org/mailman/listinfo/discuss-gnuradio
>
>
>
> _______________________________________________ Discuss-gnuradio mailing
> list Discuss-gnuradio@gnu.org
> https://lists.gnu.org/mailman/listinfo/discuss-gnuradio
>
>
>
> _______________________________________________ Discuss-gnuradio mailing
> list Discuss-gnuradio@gnu.org
> https://lists.gnu.org/mailman/listinfo/discuss-gnuradio
>
_______________________________________________
Discuss-gnuradio mailing list
Discuss-gnuradio@gnu.org
https://lists.gnu.org/mailman/listinfo/discuss-gnuradio

Reply via email to