簡體   English   中英

hier_block的行為與GNU Radio中的sync_block的行為有何不同?

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

這是這個問題的延續。 我知道我們不能訪問input_items__init__中的input_items,但是我們可以在hier_block這樣做(例如這里 )。 我想在頂部塊框架上添加一個面板,只能通過在__init__self.win分配一個面板來self.win (就像在hier_block示例中一樣)。 如果我嘗試在self.win的工作函數中為self.win分配一個面板,那么它會給出錯誤: 'xyz'對象沒有屬性'win' 雖然我可以在self.win __init__中為self.win分配一個面板( 這就是為什么我想首先訪問__init__中的input_items

回應馬庫斯的回答

如果我在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的指導教程 ,這些都是非常巧妙地解釋的。 你的問題內容與你的標題無關,所以我不打算回答標題中的問題。

但是,你真正的問題是另一個問題:

在嘗試在工作中設置GUI時,事情就出錯了。

並且作為在另一個帖子中給出的答案的延續:你沒有work函數中設置事物。 該方法用於信號處理。

在構造期間,即在top_block__init__中設置包括GUI的top_block 只有該塊將圖形框架的窗口對象設置為屬性。

編輯:你想實現自己的繪圖儀:

您說的代碼中的注釋

#Comment 2 - >這不起作用,因為Marcus說“只有init塊將圖形框架的窗口對象設置為屬性。”

是一個錯誤的引用。 只有你的top_block可以訪問win屬性,因為這是top_block(和其他人的)的屬性。 這是你在這里混淆的基本python。

另一條評論

注釋1 - >這不起作用,因為我在這里沒有訪問input_items

表明你還不太了解GNU Radio是如何工作的。 你必須實現一個工作函數,該函數有一個參數input_items ; 顯然,當你不在那個函數中時,你不能訪問另一個函數參數 - 這也是一個邏輯/編程語言的東西。

我在這里所做的就是重復: 閱讀指導教程 ,並在嘗試復雜的事情之前完成所有練習。 否則,嘗試幫助你的人必須解釋基本的東西,盡管你有先進的問題。 有沒有辦法熟悉如何在Python中為GNU Radio編程,並且指導教程(我提到你應該閱讀它們嗎?)使得這很容易,因為你對python有點熟悉。 如果您不熟悉python,請轉到python.org並首先執行python2教程。 不應該花很長時間。 你真的需要理解類,方法,構造函數,變量,參數,屬性的概念,然后才能深入研究使用與GNU Radio一樣多的面向對象范例的東西。

我對你的問題的評論:

  1. 使用現有的繪圖塊(在gnuradio / gr-wxgui中)作為參考。 出於某種原因,它們大多是用C ++編寫的。 讓它工作非常復雜,因此實現自己的可視化並不是初學者的任務,特別是因為你似乎也在努力解決一些基本的python概念。 這很快就會出現多線程問題。 要清楚:你想要做什么(從塊線程調用繪圖函數)是有問題的,通常是行不通的
  2. 在今天擴展GNU Radio的GUI功能時,請不要使用WX Gui。 那遲早會消失; 如今,GNU Radio非常關注QT。
  3. 您確定通過向現有的可視化器提供樣品,您無法准確實現所需的功能嗎? 這將更容易,更好地實施,更普遍。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM