[英]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一樣多的面向對象范例的東西。
我對你的問題的評論:
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.