gpt4 book ai didi

python - hier_block 的行为与 GNU Radio 中的sync_block 的行为究竟有何不同?

转载 作者:行者123 更新时间:2023-11-30 23:10:23 26 4
gpt4 key购买 nike

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

回应 Marcus 的回答

如果我在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
..............
..............

查看我在上面代码中添加的注释。既然这两种方法都不起作用,那么如何做我想做的呢?

最佳答案

How exactly is hier_block 's behaviour different then that of a sync_block in GNU Radio?

您应该阅读guided tutorials GNU Radio 的内容对此进行了非常简洁的解释。你的问题内容与你的标题无关,所以我不会回答标题中的问题。

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

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

作为在另一个线程中给您的答案的延续:您work 函数中进行设置。该方法用于信号处理。

在构建期间(即在 top_block__init__ 中)设置包括 GUI 在内的流程图。只有该 block 将图形框架的窗口对象设置为属性。

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

代码中您所说的注释

# Comment 2 -> this doesnt work as Marcus says "Only init block has the graphical framework's window object set as property."

是一个错误的引用。只有您的 top_block 有权访问 win 属性,因为这是该 top_block 的属性(而不是其他人的)。这是你在这里混淆的基本Python。

其他评论

Comment 1 -> this will not work as I dont have access to input_items here

表明您还不太了解 GNU Radio 的工作原理。您必须实现一个工作函数,该函数有一个参数 input_items;显然,当您不在该函数中时,您无法访问另一个函数参数——这也是逻辑/编程语言的事情。

我在这里所能做的就是重复:阅读指导教程,并在尝试复杂的操作之前完成其中的所有练习。否则,即使你有高级问题,试图帮助你的人也必须解释基本的东西。没有办法首先熟悉如何使用 Python 为 GNU Radio 进行编程,并且指导教程(我是否提到过您应该阅读它们?)使这变得非常容易,因为您对 Python 有点熟悉。如果您不熟悉 python,请先访问 python.org 并完成 python2 教程。应该不会花很长时间。在你深入研究像 GNU Radio 这样使用大量面向对象范例的东西之前,你确实需要理解类、方法、构造函数、变量、参数、属性的概念。

我对你的问题的评论:

  1. 使用现有的绘图 block (在 gnuradio/gr-wxgui 中)作为引用。它们大多是用 C++ 编写的,这是有原因的。要让它发挥作用相当复杂,因此实现自己的可视化并不是初学者的任务,特别是因为您似乎还很难掌握一些基本的 Python 概念。这很快也会出现多线程问题。需要明确的是:您尝试执行的操作(从 block 线程调用绘图函数)是有问题的,并且通常不起作用
  2. 现在扩展 GNU Radio 的 GUI 功能时,不要使用 WX Gui。这种情况迟早会消失的; GNU Radio 现在非常关注 QT。
  3. 您确定无法通过向现有可视化工具提供示例来准确实现您所需要的功能吗?这会更容易、更容易实现、也更普遍。

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

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com