从 main() 调用类方法时无法使消息传递工作。类方法包含对消息传递函数的调用

问题描述 投票:0回答:1

我正在尝试从 OOT 模块向 gr-display 模块发送消息。该任务是一个具有复杂流程图的大型项目的一部分。因此,我将仅提供代码的相关部分。我希望这足以通过一些解释来理解我的问题。

流程图中 ft8_rxtx OOT 模块连接到 gr-display 模块。

代码如下:

from gnuradio import gr
import pmt

class ft8_rxtx(gr.basic_block):
    """
    docstring for block ft8_rxtx
    """
    def __init__(self, ptt_button, band_selector):
        gr.basic_block.__init__(self,
            name="ft8_rxtx",
            in_sig=[],
            out_sig=[])
        self.ptt_button = ptt_button
        self.band_selector = band_selector
        self.portName = "text_out"
        self.message_port_register_out(pmt.intern(self.portName))
 
def set_FT8(self, FT8_button):
        if FT8_button == 1:
            self.send_msg("Help")
            PMT_msg = pmt.to_pmt("Help")
            self.message_port_pub(pmt.intern(self.portName), PMT_msg)
            main()
        else:
            quit()

def send_msg(self, msg):
        PMT_msg = pmt.to_pmt(msg)
        self.message_port_pub(pmt.intern(self.portName), PMT_msg)


def main():

    gen_msg = ft8_rxtx(0,1)
    gen_msg.send_msg("MAIN")
 
In main() I am calling send_msg as evidenced by the use of a print statement in the method which correctly displays MAIN. However, the message_port_pub() does not send the message to the gr-display.
 

如果调用set_FT8,self.send_msg(“Help”)会正确执行,self.message_port_pub()也会正确执行。两者都将消息“Help”发送到 gr-display。

因此,当从类方法调用 send_msg 时,消息传递有效,但当从 main() 调用时,消息传递不起作用。为什么不呢?我遗漏了什么?

吉姆

python gnuradio
1个回答
0
投票

这不是有效的 Python;你需要使

send_msg
成为你的类的方法,而不是一个独立的函数。

© www.soinside.com 2019 - 2024. All rights reserved.