这是this问题的延续。我了解我们无法在sync_block的input_items中访问__init__,但可以在hier_block中访问(例如here)。我想在顶部块框架上添加一个面板,这只能通过将面板分配给self.win中的__init__来完成(就像在hier_block示例中一样)。如果我尝试将面板分配给sync_block的工作函数内的self.win,则会出现错误:'xyz'对象没有属性'win'。虽然如果我将面板分配给sync_block的self.win内的__init__也是可行的(这就是为什么我想首先访问input_items内的__init__的原因)

回应马库斯答案

如果我想在wxPanel上绘制图,然后将面板放在top_block wxFrame上。这是一个例子-

class xyz(gr.sync_block):
    """
    docstring for block add_python
    """
    def __init__(self,parent):
        .......
        gr.sync_block.__init__(self,
            name="xyz",
            in_sig=[numpy.float32,numpy.float32],
            out_sig=None)
        self.win = xyzPlot(parent,input_items) # Comment 1 -> this will not work as I dont have access to input_items here


    def work(self, input_items, output_items):
        ..........
        ..........
        self.win = xyzPlot(parent,input_items) # Comment 2 -> this doesnt work as Marcus says "Only __init__ block has the graphical framework's window object set as property."
        ..........
        ..........

class xyzPlot(wx.Panel):
    def __init__(self, parent , input_items):
        wx.Panel.__init__(self , parent , -1 ,size=(1000,1000))
        ..............
        ..............
        #plots a plot on the panel depending on the input_items
        ..............
        ..............


看看我在上面的代码中添加的两个注释。既然两种方法都不起作用,该怎么做呢?

最佳答案

hier_block的行为与GNU Radio中sync_block的行为有何不同?


您应该阅读GNU Radio的guided tutorials,所有内容都非常简洁地解释了。您问题的内容与标题无关,因此我不会在标题中回答问题。

但是,您真正的问题是不同的:

尝试在工作中设置GUI时,出现了问题。

并作为在其他线程中给出的答案的延续:您无需在work函数中进行任何设置。该方法仅用于信号处理。

在构造过程中(即在__init__top_block中)设置包括GUI的流程图。只有该块才将图形框架的window对象设置为属性。

编辑:您想实现自己的绘图仪:

您说的代码中的注释


  #Comment 2->这不起作用,因为Marcus说“只有init块将图形框架的window对象设置为属性”。


是错误的报价。只有您的top_block有权访问win属性,因为那是该top_block的属性(其他任何人都没有)。这是您在此处混用的基本python。

其他评论


  评论1->这将不起作用,因为我无法在此处访问input_items


说明您仍然不太了解GNU Radio的工作方式。
您必须实现一个工作函数,并且该函数具有参数input_items。显然,当您不在该函数中时,就无法访​​问另一个函数参数-这也是逻辑/编程语言。

我在这里能做的就是重复:阅读指导性教程,并尝试所有复杂的事情之前,先做所有练习。否则,尽管您有高级问题,但尝试帮助您的人员必须解释一些基本知识。首先您无法熟悉如何使用Python编写GNU Radio程序,而如果您对python有所了解,那么有指导性的教程(我是否提到过您应该阅读它们?)使这一过程变得非常容易。
如果您不熟悉python,请转至python.org并首先进行python2教程。不应该花很长时间。您真正需要了解类,方法,构造函数,变量,参数,属性的概念,然后才能深入使用与GNU Radio一样多的面向对象范例。

我对你的问题的评论:


使用现有的绘图块(在gnuradio / gr-wxgui中)作为参考。由于某种原因,它们大多是用C ++编写的。要使它正常工作是非常复杂的,因此实现您自己的可视化并不是初学者的任务,尤其是因为您似乎还遇到了一些基本的python概念。这也很快会引起多线程问题。需要明确的是:您要执行的操作(从块线程调用绘图功能)存在问题,通常是行不通的。
今天扩展GNU Radio的GUI功能时,请勿使用WX Gui。那迟早会消失的。如今,GNU Radio非常重视QT。
您确定无法通过为现有的可视化仪提供样品来准确实现所需的功能吗?这样会更容易,更好地实现并且更加通用。

关于python - hier_block的行为与GNU Radio中sync_block的行为有何不同?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/30703138/

10-12 20:58