<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      Pyqtgraph入門

      一、介紹
      1.1 什么是pyqtgraph?
      PyQtGraph是Python的圖形和用戶界面庫,它充分利用PyQt和PtSide的高質量的圖形表現水平和NumPy的快速科學計算與處理能力,在數學、科學和工程領域都有廣泛的應用。 其主要目標是:

       為數據(繪圖,視頻等)提供快速可交互式圖形顯示。
       
       
       提供幫助快速開發應用程序的工具(例如,Qt Designer中使用的屬性樹)。
       
      PyQtGraph被大量應用于Qt GUI平臺(通過PyQt或PySide),因為它的高性能圖形和numpy可用于大量數據處理。 特別注意的是,pyqtgraph使用了Qt的GraphicsView框架,它本身是一個功能強大的圖形系統; 我們將最優化和簡化的語句應用到這個框架中,以最小的工作量實現數據可視化。
      支持Linux,Windows和OSX系統
      1.2 它可以做什么?
      pyqtgraph的核心特征是:

       基本的2D交互視圖中框繪制
       
       
       線和散點圖
       
       
       數據可平移/縮放鼠標
       
       
       實時數據的顯示和交互的快速繪制
       
       
       圖像顯示與互動的查找表和電平控制
       
       
       顯示所有數據類型(int或float;任何比特深度;RGB,RGBA,或亮度)
       
       
       切片的多維圖像任意角度的函數
       
       
       快速更新的視頻顯示和實時交互
       
       
       三維圖形系統(需要Python OpenGL綁定)
       
       
       體積數據的渲染
       
       
       三維表面和散點圖
       
       
       網格的等值面生成渲染
       
       
       交互式視口旋轉/縮放鼠標
       
       
       更容易編程的基本的3D場景圖
       
       
       數據選擇/標記和感興趣的控制區
       
       
       交互標記垂直/水平的地塊的位置和區域
       
       
       從圖像中選擇任意區域的部件和自動切片數據匹配
       
      1.3 例子
      PyQtGraph包含一系列可通過運行來訪問的示例:
      import pyqtgraph.examplespyqtgraph.examples.run()
      運行結果:
       
       
       
      這將啟動一個啟動器并列出可用的示例。 從列表中選擇一個項目以查看其源代碼,然后雙擊一個項目以運行該示例。 注意如果你已經用python setup.py開發安裝pyqtgraph,那么這些例子就會被錯誤地提示為top-level module。 在這種情況下,使用導入示例:examples.run()。
      1.4 與其他繪圖庫對比

       matplotlib:對于繪圖而言,pyqtgraph幾乎不像matplotlib完整或者成熟,但運行速度更快。 Matplotlib的目標更多是制作出版質量的圖形,而pyqtgraph則用于數據采集和分析應用。Matplotlib對于matlab程序員來說更直觀。pyqtgraph對python/qt程序員更直觀。Matplotlib(據我所知)并不包含許多pyqtgraph的功能,如圖像交互,體繪制,參數樹,流程圖等。
       
       
       pyqwt5:大概和pyqwt5一樣快,但對繪圖功能來說不完全一樣。 pyqtgraph中的圖像處理更完整(同樣,qwt中沒有ROI小部件)。 另外,pyqtgraph是用純python編寫的,所以它比pyqwt更易于移植,pyqwt在開發中經常落后于pyqt(我最初使用pyqwt,但認為在我的項目中依賴它是太麻煩了)。 就像matplotlib一樣,pyqwt(據我所知)并不包含很多pyqtgraph的特性,比如圖像交互,體積渲染,參數樹,流程圖等。
       
      二、鼠標交互
      大多數使用pyqtgraph數據可視化的應用程序都會生成可交互縮放,平移和使用鼠標配置的小部件。 本節介紹鼠標與這些小部件的交互。
      2.1二維圖形
      在pyqtgraph中,大多數2D可視化遵循以下鼠標交互:
       

       左鍵:與場景中的項目交互(選擇/移動對象等)。 如果鼠標光標下沒有可移動的物體,那么用左邊的按鈕拖動就會平移場景。
       
       
       右鍵拖動:縮放場景。 水平拖動左/右縮放; 向上/向下拖動垂直縮放(盡管某些場景將其x / y縮放比例鎖定在一起)。 如果在場景中有x / y軸可以閃動,那么右鍵拖動軸會影響該軸。
       
       
       右鍵單擊:在大多數情況下單擊右鍵將根據鼠標光標下的對象顯示具有各種選項的上下文菜單。
       
       
       中間按鈕(或滾輪)拖動:按下滾輪拖動鼠標將始終平移場景(在場景中其他對象阻止左側平移的情況下,此功能非常有用)。
       
       
       輪旋轉:放大和縮小場景。
       
      對于使用右側或中間按鈕拖動很困難的機器(通常是Mac),存在另一種鼠標交互模式。 在此模式下,用鼠標左鍵拖動可在場景的某個區域上繪制一個框。 按鈕釋放后,場景將縮放并平移以適合框。 可以在上下文菜單中或通過調用以下方式訪問此模式:
      pyqtgraph.setConfigOption('leftButtonPan', False)
      2.2 上下文菜單
      右鍵單擊大多數場景將顯示一個上下文菜單,其中包含用于更改場景行為的各種選項。 這個菜單中的一些選項是:

       數據范圍變化時啟用/禁用自動縮放
       
       
       將多個視圖的軸鏈接在一起
       
       
       啟用禁用每個軸的鼠標交互
       
       
       顯式設置可見范圍值
       
      菜單中可用的確切項目取決于場景的內容和點擊的對象。
       
      2.3 三維圖形
      3D可視化使用以下鼠標交互:

       左鍵拖動:圍繞中心點旋轉場景
       
       
       中間按鈕拖動:通過移動x-y平面內的中央“查看”點來平移場景
       
       
       中間按鈕拖動+ CTRL:通過沿z軸移動中央“查看”點來平移場景
       
       
       滾輪旋轉:放大/縮小
       
       
       車輪+ CTRL:改變視場角
       
      鍵盤控制:

       箭頭鍵圍繞中心點旋轉,就像拖動鼠標左鍵一樣
       
      三、如何使用pyqtgraph?
      這里有幾個建議使用pyqtgraph的方法:

       從交互式shell(python -i,ipython等)
       
       
       顯示應用程序的彈出窗口
       
       
       將小部件嵌入到PyQt應用程序中
       
      3.1 使用命令行
      PyQtGraph使得從命令行可視化數據變得非常容易。注意:
      這個例子就是告訴你有兩個主要的函數:pg.plot,pg.image。一個畫曲線,一個畫圖像。
      import numpy as npimport pyqtgraph as pg data = np.random.normal(size=1000)pg.plot(data, title="Simplest possible plotting example")# data can be a list of values or a numpy array data = np.random.normal(size=(500,500))pg.image(data, title="Simplest possible image example")# data can be a list of values or a numpy array  ## Start Qt event loop unless running in interactive mode or using pyside.if __name__ == '__main__':    import sys    if sys.flags.interactive != 1 or not hasattr(QtCore, 'PYQT_VERSION'):        pg.QtGui.QApplication.exec_()
      運行結果:
       
       
      上面的例子將打開一個窗口,顯示給定數據的線圖。 對pg.plot的調用返回創建的繪圖窗口小部件的句柄,從而允許將更多數據添加到同一個窗口。 注意:python提示符中的交互式繪圖僅適用于PyQt; 在交互式提示符運行時,PySide不運行Qt事件循環。 如果你想與PySide交互使用pyqtgraph,請參閱'console'示例。
      其他例子:
      pw = pg.plot(xVals, yVals, pen='r')  # plot x vs y in redpw.plot(xVals, yVals2, pen='b') win = pg.GraphicsWindow()  # Automatically generates grids with multiple itemswin.addPlot(data1, row=0, col=0)win.addPlot(data2, row=0, col=1)win.addPlot(data3, row=1, col=0, colspan=2) pg.show(imageData)  # imageData must be a numpy array with 2 to 4 dimensions
       

      我們在這里只是展示最基本的用法 - 這些函數接受許多不同的數據格式和選項來自定義數據的外觀。
       
      3.2 在應用程序中顯示窗口
      雖然我認為這種方法有些懶惰,但“懶惰”往往與“高效”無法區分。 這里的方法很簡單,就是使用與命令行相同的功能,但是在現有的應用程序中使用。 當我只是想立即獲得關于應用程序中數據狀態的反饋時,我經常使用它,而無需花時間為其構建用戶界面。
       
      3.3 在PyQt應用程序中嵌入小部件
      對于認真的應用程序開發人員來說,pyqtgraph中的所有功能都可以通過像其他任何Qt小部件一樣嵌入來使用。 更多的重要信息,請參閱:lotWidget,ImageView,GraphicsLayoutWidget和GraphicsView。 PyQtGraph的小部件可以通過“Promote To ...”功能包含在Designer的ui文件中:

       Designer中,創建一個QGraphicsView小部件(“Graphics View”類別下的“Display Widgets”)。
       
       
       用鼠標右鍵單擊QGraphicsView并選擇““Promote To...”。
       
       
       在“Promoted calss name”下,輸入您希望使用的類名稱(“PlotWidget”,“GraphicsLayoutWidget”等)。
       
       
       在“Header file”下,輸入“pyqtgraph”。
       
       
       點擊“Add”,然后點擊“Promote”。
       
      有關promoting widgets的更多信息,請參閱設計器文檔?!癡ideoSpeedTest”和“ScatterPlotSpeedTest”示例都演示了如何使用pyui4或pyside-uic編譯為.py模塊的.ui文件?!癲esignerExample”示例演示從.ui文件動態生成python類(不需要pyuic4 / pyside-uic)。
      3.4 PyQt and PySide
      PyQtGraph支持兩種常用的Qt庫python包:PyQt和PySide。 這兩個軟件包提供了幾乎相同的API和功能,但由于各種原因,您可能更喜歡使用一個軟件包或其他軟件包。 當第一次導入pyqtgraph時,它會通過一下檢測來確定使用哪個庫:

       如果PyQt4已經導入,請使用它
       
       
       否則,如果PySide已經導入,就使用它
       
       
       否則,嘗試導入PyQt4
       
       
       如果導入失敗,請嘗試導入PySide。
       
      如果你的系統上已經安裝了這兩個庫,并且你想強制pyqtgraph使用其中一個或者另一個,只需確保它在pyqtgraph之前被導入:
      import PySide  ## this will force pyqtgraph to use PySide instead of PyQt4    import pyqtgraph as pg
      3.5 將PyQtGraph庫導入到大型項目中
      在編寫使用pyqtgraph的應用程序或python包時,通常在系統范圍內(或在virtualenv中)安裝pyqtgraph,并在應用程序內調用import pyqtgraph。 這樣做的主要好處是pyqtgraph是獨立于應用程序進行配置的,因此您(或您的用戶)可以自由安裝較新版本的pyqtgraph,而無需在應用程序中更改任何內容。 這是用python開發時的標準做法。
       
      然而,特別是對于科學應用來說,情況也是如此,即軟件是為特定目的而編寫的,然后進行存檔。如果我們想要確保軟件在十年后仍能正常工作,那么最好將應用程序綁定到一個特定版本的pyqtgraph上,并避免導入系統安裝的pyqtgraph版本,這可能會更新(可能不兼容)。尤其當應用程序需要對主要版本中可能不存在的pyqtgraph軟件包進行特定的修改時,情況如此。
       
      PyQtGraph通過兩種機制來促進這種用法。首先,pyqtgraph中的所有內部導入語句都是相對的,它允許將包重命名或用作子包,而不會與系統中其他版本的pyqtgraph產生任何命名沖突(即,pyqtgraph從未在內部將其自身稱為“pyqtgraph ”)。其次,可以在 https://github.com/pyqtgraph/pyqtgraph-core.git 找到一個git樹狀子目錄存儲庫,它只包含'pyqtgraph /'樹狀子目錄,允許將代碼直接克隆為使用它的應用程序的子目錄。
       
      基本的方法是將存儲庫克隆到包中的適當位置。從包中導入pyqtgraph時,一定要使用全名來避免導入任何系統安裝的pyqtgraph包。例如,假設一個簡單的項目具有以下結構:
      my_project/    __init__.py    plotting.py        """Plotting functions used by this package"""        import pyqtgraph as pg        def my_plot_function(*data):            pg.plot(*data)
      要導入特定版本的pyqtgraph,我們將克隆項目中的pyqtgraph-core存儲庫:
      my_project$ git clone https://github.com/pyqtgraph/pyqtgraph-core.git
      然后相應地調整導入語句:
      my_project/    __init__.py    pyqtgraph/    plotting.py        """Plotting functions used by this package"""        import my_project.pyqtgraph as pg  # be sure to use the local subpackage                                           # rather than any globally-installed                                           # versions.        def my_plot_function(*data):            pg.plot(*data)
      使用 git checkout pyqtgraph-core-x.x.x 選擇特定版本的存儲庫,或使用 git pull 從上游拉取pyqtgraph更新(有關更多信息,請參閱git文檔)。
       
      對于已經使用git進行代碼控制的項目,也可以在你自己的倉庫中包含pyqtgraph作為git樹狀子目錄。 這種方法的主要優點是,除了能夠從上游存儲庫中獲取pyqtgraph更新之外,還可以將本地pyqtgraph更改提交到項目存儲庫并向上游推送這些更改:
      my_project$ git remote add pyqtgraph-core https://github.com/pyqtgraph/pyqtgraph-core.gitmy_project$ git fetch pyqtgraph-coremy_project$ git merge -s ours --no-commit pyqtgraph-core/coremy_project$ mkdir pyqtgraphmy_project$ git read-tree -u --prefix=pyqtgraph/ pyqtgraph-core/coremy_project$ git commit -m "Added pyqtgraph to project repository"
       有關更多信息,請參閱 git subtree 文檔。

      四、安裝

       根據您的需要,有許多不同的方式來安裝pyqtgraph:
       $ pip install pyqtgraph
       
      有些用戶可能需要調用pip3。 這種方法應該適用于所有平臺。

       要訪問最新的功能和bug,請從github復制pyqtgraph:
        $ git clone https://github.com/pyqtgraph/pyqtgraph
       現在你可以從源代碼安裝pyqtgraph:
         $ python setup.py install
       
      ..或者你可以簡單地把pyqtgraph文件夾放置在可導入的地方,比如在另一個項目的根目錄中。 PyQtGraph不需要以任何方式“built”或編譯。

       pyqtgraph的軟件包還有其他幾種形式:
       
       Anaconda:conda install pyqtgraph
       
       
       Debian,Ubuntu和類似的Linux:使用 apt install python-pyqtgraph 或下載在pyqtgraph官網網頁頂部的.deb文件。
       
       
       Arch Linux:安裝包(感謝 windel)。(https://aur.archlinux.org/packages.php?ID=62577)
       
       
       Windows:在pyqtgraph官網頂部下載.exe安裝程序文件。
       
      五、配置
      PyQtGraph依賴于:

       Python 2.7 or Python 3.x
       
       
       A Qt library such as PyQt4, PyQt5, or PySide
       
       
       numpy
       
      滿足這些配置的最簡單方法是使用pip或像Anaconda這樣的科學Python發行版。
      六、Qt 快速教學
      幾乎所有的PyQtGraph庫的圖形界面都是由Qt來生成。 Qt的文檔寫得很好,我們鼓勵所有pyqtgraph開發人員熟悉它。 本節的目的是介紹如何使用Qt(使用PyQt或PySide)編寫pyqtgraph開發者程序。
      6.1 窗口和布局
      Qt GUI幾乎都是由幾個基本組件組成:

       一個窗口。 這通常由QMainWindow提供,但請注意,如果窗口小部件沒有父窗口,只需調用widget.show(),就可以在窗口中顯示所有QWidgets。
       
       
       多個QWidget實例,如QPushButton,QLabel,QComboBox等
       
       
       QLayout實例(可選,但強烈鼓勵),它可以自動管理窗口小部件的位置,同時允許GUI以可調整的方式調整大小。
       
      PyQtGraph通過提供自己的QWidget子類插入到你的GUI中來適應這個方案。
      例如:
      from PyQt4 import QtGui  # (the example applies equally well to PySide)import pyqtgraph as pg?## Always start by initializing Qt (only once per application)app = QtGui.QApplication([])?## Define a top-level widget to hold everythingw = QtGui.QWidget()?## Create some widgets to be placed insidebtn = QtGui.QPushButton('press me')text = QtGui.QLineEdit('enter text')listw = QtGui.QListWidget()plot = pg.PlotWidget()?## Create a grid layout to manage the widgets size and positionlayout = QtGui.QGridLayout()w.setLayout(layout)?## Add widgets to the layout in their proper positionslayout.addWidget(btn, 0, 0)   # button goes in upper-leftlayout.addWidget(text, 1, 0)   # text edit goes in middle-leftlayout.addWidget(listw, 2, 0)  # list widget goes in bottom-leftlayout.addWidget(plot, 0, 1, 3, 1)  # plot goes on right side, spanning 3 rows?## Display the widget as a new windoww.show()??## Start the Qt event loopapp.exec_()
       
      運行結果:
       
      更復雜的界面可以使用Qt Designer進行圖形化設計,它可以簡單的拖拽小部件到窗口中定義其外觀。
      6.2 命名約定
      事實上pyqtgraph中的每個類都是Qt提供的基類的擴展。 在閱讀文檔時,請記住Qt的所有類都以字母“Q”開頭,而pyqtgraph的類沒有。 在閱讀任何類的方法時,這樣通常有助于查看使用了哪些Qt基類,然后查看Qt文檔。
      大多數Qt的類都定義了很難區別于常規方法的信號。幾乎所有由pyqtgraph定義的信號顯示都以’sig’開頭,表示這些信號不是在Qt級定義。
      在大多數情況下,以’Widget’結尾的類都是QWidget的子類,因此可以用作Qt窗口中的GUI元素。 以’Item’結尾的類是QGraphicsItem的子類,只能在QGraphicsView實例(如GraphicsLayoutWidget或PlotWidget)中顯示。
      6.3 信號、槽和事件
      Qt通過執行其事件循環來檢測用戶交互并對其做出反應。

       事件循環中發生了什么?
       
       
       我什么時候需要使用QApplication.exec_()?
       
       
       我對事件循環執行有什么控制?(QApplication.processEvents)
       
      6.4 GraphicsView and GraphicsItems
      有關Qt GraphicsView體系結構的更多信息:http://qt-project.org/doc/qt-4.8/graphicsview.html
      6.5 坐標系與轉換
      有關Qt GraphicsView中坐標系的更多信息:http://qt-project.org/doc/qt-4.8/graphicsview.html#the-graphics-view-coordinate-system
      七、在pyqtgraph中繪圖
      在pyqtgraph中繪制數據有幾種基本的方法:
      方法
         描述
        pyqtgraph.plot()
         創建一個顯示數據的新圖形窗口
        PlotWidget.plot()
         將一組新數據添加到現有的繪圖小部件
        PlotItem.plot()
         將一組新數據添加到現有的繪圖小部件
        GraphicsLayout.addPlot()
         在網格中添加一個新的圖形
        所有這些方法都接收相同的基本參數,這些參數控制如何繪制數據和顯示圖形:

       x - 可選的X數據; 如果未指定,則會自動生成一系列整數。
       
       
       y - Y數據。
       
       
       pen - 繪制繪圖線時使用的筆,或者無以禁用線。
       
       
       symbol - 描述用于每個點的符號形狀的字符串。 可選地,這也可以是對于每個點具有不同符號的字符串序列。
       
       
       symbolPen - 繪制符號輪廓時使用的筆(或筆序列)。
       
       
       symbolBrush - 填充符號時使用的畫筆(或畫筆序列)。
       
       
       fillLevel - 填充曲線下面的區域為該Y值。
       
       
       brush - 填充曲線時使用的筆刷。
       
      請參閱“繪圖”示例來演示這些參數。
      所有上述函數會將返回值給創建它的對象,允許進一步修改繪圖和數據。
      7.1 建立繪圖類
      顯示繪圖數據時有幾種類型。 大多數這些類都是自動實例化的,但了解它們是如何組織和相互關聯是非常有用的。 PyQtGraph很大程度上基于Qt的GraphicsView框架 - 如果您還不熟悉這一點,那么值得一讀(但不是必需的)。 最重要的是:1)Qt GUI由QWidgets組成,2)稱為QGraphicsView的特殊小部件用于顯示復雜圖形,3)QGraphicsItems定義在QGraphicsView中顯示的對象。

       數據類(QGraphicsItem的所有子類)
       
        PlotCurveItem - 顯示給定x,y數據的繪圖線
        
        
        ScatterPlotItem - 顯示給定x,y數據的點
        
        
        PlotDataItem - 組合PlotCurveItem和ScatterPlotItem。上面討論的繪圖函數創建了這種類型的對象。
        
       
       
       容器類(QGraphicsItem的子類;包含其他QGraphicsItem對象,必須從GraphicsView中查看)
       
        PlotItem - 包含用于顯示數據的ViewBox以及用于顯示軸和標題的AxisItems和標簽。這是一個QGraphicsItem子類,因此只能在GraphicsView中使用
        
        
        GraphicsLayout - 顯示項目網格的QGraphicsItem子類。 這用于一起顯示多個PlotItem。
        
        
        ViewBox - 一個用于顯示數據的QGraphicsItem子類。 用戶可以使用鼠標縮放/平移ViewBox的內容。 通常,所有PlotData / PlotCurve / ScatterPlotItems都是在ViewBox中顯示的。
        
        
        AxisItem - 顯示軸值,刻度和標簽。 最常用于PlotItem。
        
       
       
       容器類(QWidget的子類;可能嵌入在PyQt GUI中)
       
        PlotWidget - 顯示一個PlotItem的GraphicsView的子類。 PlotItem提供的大多數方法也可以通過PlotWidget獲得。
        
        
        GraphicsLayoutWidget - 顯示單個GraphicsLayoutItem的QWidget子類。 GraphicsLayoutItem提供的大多數方法也可以通過GraphicsLayoutWidget獲得。
        
        
       
      7.2 例子
      有關更多信息,請參閱pyqtgraph附帶的“plotting”和“PlotWidget”示例。
      將x,y數據顯示為散點圖:
      import pyqtgraph as pgimport numpy as npx = np.random.normal(size=1000)y = np.random.normal(size=1000)pg.plot(x, y, pen=None, symbol='o')  ## setting pen=None disables line drawing
      運行結果:
       
      創建/顯示一個繪圖小部件,顯示三條數據曲線:
      import pyqtgraph as pgimport numpy as npx = np.arange(1000)y = np.random.normal(size=(3, 1000))plotWidget = pg.plot(title="Three plot curves")for i in range(3):    plotWidget.plot(x, y[i], pen=(i,3))  ## setting pen=(i,3) automaticaly creates three different-colored pens
      運行結果:
       
      八、顯示圖像和視頻
      PyQtGraph將2D numpy數組顯示為圖像,并提供確定如何在屏幕上的numpy數據類型和RGB值之間進行轉換的工具。 如果要顯示常用圖像和視頻文件格式的數據,則需要先使用另一個庫(PIL適用于圖像和內置numpy轉換)加載數據。
      顯示二維或三維數據最簡單的方法是使用pyqtgraph.image()函數:
      import pyqtgraph as pgpg.image(imageData)
      該函數將接受任何浮點數或整數數據類型,并顯示包含數據的單個ImageView小部件。 此小部件包含用于確定圖像數據如何轉換為32位RGBa值的控件。 轉換分兩步進行(兩者都是可選的):

       縮放和偏移數據(通過選擇顯示的直方圖上的黑暗/亮度級別)
       
       
       使用查找表將數據轉換為顏色(由漸變編輯器中顯示的顏色確定)
       
      如果數據是3D(時間,x,y),則時間軸將顯示一個可以設置當前顯示幀的滑塊。 (如果數據中的坐標軸的排列方式不同,請使用numpy.transpose重新排列它們)
      還有其他一些顯示圖像的方法:

       ImageView類也可以直接實例化并嵌入到Qt應用程序中。
       
       
       ImageItem的實例可以在ViewBox或GraphicsView中使用。
       
       
       為了獲得更高的性能,請使用RawImageWidget。
       
      通過調用setImage()來顯示一個新的幀,任何這些類都可以用來顯示視頻。 為了提高性能,圖像處理系統使用scipy.weave生成編譯庫。 如果您的計算機具有可用的編譯器,則編譯器將自動嘗試根據需要構建它所需的庫。 如果失敗,則會使用較慢的純Python方法。
      有關更多信息,請參閱上面列出的類和’VideoSpeedTest’,’ImageItem’,’ImageView’和’HistogramLUT’示例。
      九、3D圖像
      PyQtGraph使用OpenGL提供3D場景圖系統。 該系統功能強大,但仍處于開發早期階段。 目前的功能包括:

       帶縮放/旋轉控件的3D視圖控件(鼠標拖動和滾輪)
       
       
       場景圖允許通過每項轉換和父/子關系從場景添加/刪除項目。
       
       
       三角網格
       
       
       基本網格計算函數:等值面,每頂點法線
       
       
       體積渲染項目
       
       
       網格/軸項目
       
      基本用法示例:
      from PyQt4 import QtGui## build a QApplication before building other widgetsimport pyqtgraph as pg?app = QtGui.QApplication([])?pg.mkQApp()?## make a widget for displaying 3D objectsimport pyqtgraph.opengl as glview = gl.GLViewWidget()view.show()?## create three grids, add each to the viewxgrid = gl.GLGridItem()ygrid = gl.GLGridItem()zgrid = gl.GLGridItem()view.addItem(xgrid)view.addItem(ygrid)view.addItem(zgrid)?## rotate x and y grids to face the correct directionxgrid.rotate(90, 0, 1, 0)ygrid.rotate(90, 1, 0, 0)?## scale each grid differentlyxgrid.scale(0.2, 0.1, 0.1)ygrid.scale(0.2, 0.1, 0.1)zgrid.scale(0.1, 0.2, 0.1)?app.exec_()
      運行結果:
       
      十、線,填充和顏色
      Qt依靠它的QColor,QPen和QBrush類為所有繪圖指定線條和填充樣式。 在內部,pyqtgraph使用相同的系統,但也允許許多簡寫方法指定相同的樣式選項。
      pyqtgraph中的許多函數和方法接受指定線條樣式(筆),填充樣式(筆刷)或顏色的參數。 對于大多數這些函數參數,可能會使用以下值:

       表示顏色的單字符串(b,g,r,c,m,y,k,w)
       
       
       (r,g,b)或(r,g,b,a)元組
       
       
       單灰度值(0.0 - 1.0)
       
       
       (index,maximum)元組,用于自動迭代顏色(請參閱intColor)
       
       
       QColor
       
       
       QPen / QBrush在適當的地方
       
      值得注意的是,使用mkPen()/ mkBrush()函數或使用Qt的QPen和QBrush類可以輕松構建更復雜的筆和畫筆:
      mkPen('y', width=3, style=QtCore.Qt.DashLine)          ## Make a dashed yellow line 2px widemkPen(0.5)                                             ## solid grey line 1px widemkPen(color=(200, 200, 255), style=QtCore.Qt.DotLine)  ## Dotted pale-blue line
      有關’QPen’和’PenStyle’的更多線型選項,請參閱Qt文檔,更多填充選項請參閱’QBrush’。 顏色也可以使用mkColor(),intColor(),hsvColor()或Qt的QColor類來構建。
      10.1 默認背景和前景色
      默認情況下,pyqtgraph為其繪圖使用黑色背景,而軸,文本和繪圖線使用灰色。 這些默認值可以使用pyqtgraph.setConfigOption()來更改:
      import pyqtgraph as pg?## Switch to using white background and black foregroundpg.setConfigOption('background', 'w')pg.setConfigOption('foreground', 'k')?## The following plot has inverted colorspg.plot([1,4,2,3,5])
      運行結果:
       
      請注意,這必須在創建任何小部件之前設置
      十一、交互式數據選擇控件
      PyQtGraph包含圖形項目,允許用戶選擇和標記數據區域。
      11.1 線性選擇和標記
      兩個類允許標記和選擇一維數據:LinearRegionItem和InfiniteLine。 第一個類LinearRegionItem可以添加到任何ViewBox或PlotItem中,以標記水平或垂直區域。 該區域可以拖動,邊界邊緣可以獨立移動。 第二類InfiniteLine通常用于標記沿x或y軸的特定位置。 這些可能會被用戶拖動。
      11.2 二維選擇和標記
      要從圖像中選擇2D區域,pyqtgraph使用ROI類或其任何子類。 默認情況下,ROI只是顯示一個矩形,可以由用戶移動以標記特定區域(通常這將是圖像的區域,但這不是必需的)。 為了允許ROI被調整大小或旋轉,有幾種方法可以添加可由用戶拖動的句柄(addScaleHandle,addRotateHandle等)。 這些手柄可以放置在相對于ROI的任何位置,并且可以在任意中心點周圍縮放/旋轉ROI。 有幾個ROI子類具有各種形狀和交互模式。
      要使用ROI和ImageItem自動提取圖像數據的區域,請使用ROI.getArrayRegion。 ROI類使用affineSlice函數來執行此提取。
      ROI也可以用作移動/旋轉/縮放場景中的項目的控件,類似于大多數vetctor圖形編輯應用程序。
      有關更多信息,請參閱ROITypes示例。
      十二、導出
      PyQtGraph為所有2D圖形提供各種導出格式。 有關3D圖形,請參閱下面的導出3D圖形。
      12.1 從GUI導出
      右鍵單擊圖形,然后從上下文菜單中選擇“導出”,即可導出任何2D圖形。 這將顯示用戶必須在其中輸出的導出對話框:

       選擇要導出的項目(或整個場景)。 選擇一個項目將使該項目在原始圖形窗口中被加亮(但這個hilight將不會顯示在導出的文件中)。
       
       
       選擇導出格式。
       
       
       更改任何所需的導出選項。
       
       
       單擊“導出”按鈕。
       
      12.2 導出口格式

       圖像 - PNG是默認格式。 支持的確切圖像格式集取決于您的Qt庫。 但是,常見的格式如PNG,JPG和TIFF幾乎總是可用的。
       
       
       SVG - 作為SVG導出的圖形可以與Inkscape和Adobe Illustrator一起使用。 對于高質量的SVG導出,請使用PyQtGraph 0.9.3或更高版本。 這是從PyQtGraph生成發布圖形的首選方法。
       
       
       CSV - 將繪制的數據導出為CSV。 此導出器僅在選擇PlotItem導出時才有效。
       
       
       Matplotlib - 此導出器打開一個新窗口,嘗試使用matplotlib(如果可用)重新繪制數據。 請注意,某些圖形功能要么未針對此導出器實現,要么在matplotlib中不可用。 此導出器僅在選擇PlotItem導出時才有效。
       
       
       打印機 - 導出到操作系統的打印服務。 此出口商是為了完整性而提供的,但由于Qt打印系統的問題而得不到很好的支持。
       
      12.3 從API導出
      要以編程方式導出文件,請按照以下示例操作:
      import pyqtgraph as pgimport pyqtgraph.exporters?# generate something to exportplt = pg.plot([1,5,2,4,3])?# create an exporter instance, as an argument give it# the item you wish to exportexporter = pg.exporters.ImageExporter(plt.plotItem)?# set export parameters if neededexporter.parameters()['width'] = 100   # (note this also affects height parameter)?# save to fileexporter.export('fileName.png')
      運行結果:
       
      12.4 導出3D圖形
      上述導出功能尚不適用于3D圖形。 但是,可以使用QGLWidget.grabFrameBuffer或QGLWidget.renderPixmap從GLViewWidget生成圖像:
      glview.grabFrameBuffer().save('fileName.png')
      有關更多信息,請參閱Qt文檔。
      十三、快速GUI原型設計
      [只是一個概述; 文件尚未完成]
      PyQtGraph提供了一些常用于工程和科學應用的強大功能。
      13.1 Parameter Trees
      參數樹系統提供了一個窗口小部件,顯示一個可修改值的樹,類似于大多數GUI編輯器應用程序中使用的樹。 這允許用戶以相對較少的編程工作來控制大量變量。 該系統還提供被控制數據和控制它的用戶界面(模型/視圖架構)之間的分離。 可以將參數分組/嵌套到任何深度,并且可以通過Parameter和ParameterItem的子類化來構建自定義參數類型。
      有關更多信息,請參閱 parametertree documentation。
      13.2 可視化編程流程圖
      PyQtGraph的流程圖提供了一個類似于概念的可視化編程環境,LabView功能模塊被添加到流程圖中并通過電線連接以定義更復雜和任意可配置的算法。 pyqtgraph包含少量預定義模塊(稱為節點),但大多數流程圖開發人員都希望定義自己的節點庫。 從本質上講,節點只不過是1)Python功能2)輸入/輸出終端列表,3)可選小部件為節點提供控制面板。 節點可以通過其終端發送/接收任何類型的Python對象。
      有關詳細信息,請參閱flowchart documentation和流程圖示例。
      13.3 圖形畫布
      Canvas是一個系統,旨在允許用戶向2D畫布添加/刪除項目,類似于大多數矢量圖形應用程序。 可以翻譯/縮放/旋轉項目,每個項目可以定義自己的自定義控制界面。
      13.4 可??康男〔考?/div>
      dockarea系統允許用戶界面的設計,用戶界面可以在運行時由用戶重新排列。 碼頭可以移動,調整大小,堆疊和撕掉主窗口。 這在原理上與Qt內置的對接系統類似,但提供了更確定的對接放置API(在Qt中,以編程方式生成復雜的對接布置非常困難)。 此外,Qt的底座設計用作窗戶外緣周圍的小面板。 PyQtGraph的底座是在整個窗口(或其任何部分)由可停靠組件組成的概念下創建的。
      十四、參數樹
      參數樹是用于處理參數的層次結構的系統,同時自動生成一個或多個GUI以顯示參數并與參數交互。 例如,在用戶界面設計應用程序中常見這一特征,該應用程序顯示每個小部件的可編輯屬性列表。 參數通常具有名稱,數據類型(int,float,string,color等)以及與數據類型匹配的值。 參數可以被分組和嵌套以形成層次結構,并且可以被子類化以提供自定義行為和顯示窗口小部件。
      PyQtGraph的參數樹系統與Qt的某些組件使用的模型 - 視圖架構的工作方式類似:參數是純粹的數據處理類,獨立于任何圖形界面而存在。 ParameterTree是一個窗口小部件,它自動生成一個圖形界面,表示參數對象層次結構的狀態,并允許用戶編輯該層次結構中的值。 數據(模型)和圖形界面(視圖)的這種分離允許相同的數據以多種不同的方式被多次表示。
      有關更多信息,請參閱pyqtgraph附帶的'parametertree'示例和API參考

       ParameterTree API參考
       
        Parameter
        
        
        ParameterTree
        
        
        Built-in Parameter Types
        
        
        ParameterItem
        
       
      十五、使用流程圖進行可視化編程
      PyQtGraph的流程圖提供了一個類似于概念的可視化編程環境,LabView功能模塊被添加到流程圖中并通過電線連接以定義更復雜和任意可配置的算法。 pyqtgraph包含少量預定義模塊(稱為節點),但大多數流程圖開發人員都希望定義自己的節點庫。 從本質上講,節點只不過是1)python功能2)輸入/輸出終端列表,以及3)為節點提供控制面板的可選小部件。 節點可以通過其終端發送/接收任何類型的Python對象。
      流程圖的一個主要限制是在流程圖中沒有用于循環的機制。 (但是單個節點可能包含循環(它們可能包含任何Python代碼),并且整個流程圖可以在循環內執行)。
      在流程圖中有兩種不同的執行代碼的模式:

       將數據提供給流程圖的輸入終端。 此方法較慢,并且在通過流程圖時將提供數據的圖形表示。 這對于調試很有用,因為它允許用戶檢查每個終端上的數據并查看流程圖中發生異常的位置。
       
       
       調用Flowchart.process() 。 該方法不更新流程圖的顯示狀態,只要需要就保留每個終端的狀態。 另外,忽略對流程圖的輸出值沒有貢獻的節點(例如繪圖節點)。 該模式允許更快地處理大數據集并避免如果流程圖中一次存在太多數據(例如,當通過若干階段處理圖像數據時)可能發生的存儲器問題。
       
      有關更多信息,請參閱流程圖示例。
      API參考:

       flowchart.Flowchart
       
       
       flowchart.Node
       
       
       flowchart.Terminal
       
      15.1 flowchart.Flowchart
      15.2 flowchart.Node
      15.3 flowchart.Terminal
      15.4 基本用法
      流程圖在您希望用戶可以任意配置的應用程序中具有處理階段的情況下最有用。 您不必提供帶有參數的預定義算法供用戶調整,而是提供一組預定義的函數,并允許用戶按照自己喜歡的方式排列和連接這些函數。 一個非常常見的例子是在音頻/視頻處理應用中使用濾波器網絡。
      首先,您必須確定流程圖的輸入和輸出變量。 創建一個為每個變量定義一個終端的流程圖:
      ## This example creates just a single input and a single output.## Flowcharts may define any number of terminals, though.from pyqtgraph.flowchart import Flowchartfc = Flowchart(terminals={    'nameOfInputTerminal': {'io': 'in'},    'nameOfOutputTerminal': {'io': 'out'}})
      在上面的示例中,每個終端都由定義該終端行為的選項字典定義(有關更多信息和選項,請參閱 Terminal.__init__() )。 請注意,未鍵入終端; 任何python對象都可以從一個終端傳遞到另一個終端。
      創建流程圖后,將其控件小部件添加到您的應用程序:
      ctrl = fc.ctrlWidget()myLayout.addWidget(ctrl)  ## read Qt docs on QWidget and layouts for more information
      控件小部件提供了幾個功能:

       顯示流程圖中包含每個節點的控件窗口小部件的所有節點的列表。
       
       
       通過“流程圖”按鈕提供對流程圖設計窗口的訪問。
       
       
       用于將流程圖保存/恢復到磁盤的接口。
       
      此時,您的用戶可以基于內置節點庫生成流程圖。 建議為用戶提供一組默認的流程圖。
      剩下的就是通過流程圖處理數據。 如上所述,有兩種方法可以做到這一點:

       使用 Flowchart.setInput() 設置輸入終端的值,然后使用 Flowchart.output() 讀取輸出終端的值:
       fc.setInput(nameOfInputTerminal=newValue)output = fc.output()  # returns {terminalName:value}
       此方法更新流程圖設計窗口中顯示的所有值,允許用戶檢查流程圖中所有終端的值,并指示處理期間發生的錯誤的位置。
       
       
       調用 Flowchart.process():
       output = fc.process(nameOfInputTerminal=newValue)
       該方法處理數據而不更新任何顯示的終端值。 此外,使用display = False調用所有 Node.process() 方法,以請求它們不調用任何自定義顯示代碼。 這樣可以更快速地處理數據并減少內存占用,但Flowchart.process()期間發生的錯誤對于用戶來說將更難以診斷。 因此,建議使用此方法通過已使用方法1測試和調試的流程圖進行批處理。
       
      15.5 實現自定義節點
      PyQtGraph包含一個內置流程圖節點的小型庫。 該庫旨在涵蓋一些最常用的函數,并提供一些更奇特的Node類型的示例。 大多數使用流程圖系統的應用程序都會發現內置庫不足,因此需要實現自定義Node類。
      節點子類至少實現:

       輸入/輸出終端列表及其屬性
       
       
       一個 process() 函數,它將輸入終端的名稱作為關鍵字參數,并返回一個以輸出終端的名稱為鍵的dict。
       
      可選地,Node子類可以實現ctrlWidget()方法,該方法必須返回將在流程圖控制面板中顯示的QWidget(通常包含其他小部件)。 最小的Node子類如下所示:
      class SpecialFunctionNode(Node):    """SpecialFunction: short description?    This description will appear in the flowchart design window when the user    selects a node of this type.    """    nodeName = 'SpecialFunction' # Node type name that will appear to the user.?    def __init__(self, name):  # all Nodes are provided a unique name when they                               # are created.        Node.__init__(self, name, terminals={  # Initialize with a dict                                               # describing the I/O terminals                                               # on this Node.            'inputTerminalName': {'io': 'in'},            'anotherInputTerminal': {'io': 'in'},            'outputTerminalName': {'io': 'out'},            })?    def process(self, **kwds):        # kwds will have one keyword argument per input terminal.?        return {'outputTerminalName': result}?    def ctrlWidget(self):  # this method is optional        return someQWidget
      一些節點實現了相當復雜的控件小部件,但大多數節點遵循一個簡單的形式模式:參數名列表和每個參數的單個值(表示為旋轉框,復選框等)。 為了簡化這一過程, CtrlNode 子類允許您改為定義一個簡單的數據結構,CtrlNode將使用該結構自動生成控件小部件。 這用于許多內置庫節點(尤其是過濾器)。
      節點和終端還有許多其他可選參數 - 是否允許用戶添加/刪除/重命名終端,是否可以將一個終端連接到許多其他終端或僅連接一個終端等。有關更多信息,請參閱 Node 和 Terminal 類的文檔細節。
      在實現新的Node子類之后,您很可能希望注冊該類,以便它出現在用戶可以從中選擇的節點菜單中:
      import pyqtgraph.flowchart.library as fclibfclib.registerNodeType(SpecialFunctionNode, [('Category', 'Sub-Category')])
      registerNodeType的第二個參數是元組列表,每個元組描述一個菜單位置,其中應顯示SpecialFunctionNode。
      有關更多信息,請參閱FlowchartCustomNode示例。
      15.5.1 調試自定義節點
      在設計流程圖或自定義節點時,必須使用至少與您要處理的數據具有相同類型和結構的數據來設置流程圖的輸入(請參閱上面的 processing methods #1)。 使用 Flowchart.setInput() 時,流程圖在其設計窗口中顯示可視反饋,可以告訴您在任何終端上存在哪些數據以及處理中是否存在錯誤。 生成錯誤的節點顯示為紅色邊框。 如果選擇節點,將顯示其輸入和輸出值以及節點處理時發生的異常(如果有)。
      15.6 使用沒有流程圖的節點
      流程圖節點通過將功能與用于配置該功能的GUI組合在一起,在數據處理中實現了非常有用的概括。 即使在流程圖的上下文之外,這種概括也是有用的。 例如:
      ## We defined a useful filter Node for use in flowcharts, but would like to## re-use its processing code and GUI without having a flowchart present.filterNode = MyFilterNode("filterNodeName")?## get the Node's control widget and place it inside the main windowfilterCtrl = filterNode.ctrlWidget()someLayout.addWidget(filterCtrl)?## later on, process data through the nodefilteredData = filterNode.process(inputTerminal=rawData)
      十六、內部 - Qt的GraphicsView的擴展

       GraphicsView
       
       
       GraphicsScene (鼠標事件)
       
       
       GraphicsObject
       
       
       GraphicsWidget
       
       
       ViewBox
       
      十七、API參考
      內容:

       Global Configuration Options全局配置選項
       
       
       PyQtGraph的助手功能
       
        Simple Data Display Functions
        
        
        Color, Pen, and Brush Functions
        
        
        Data Slicing
        
        
        Coordinate Transformation
        
        
        SI Unit Conversion Functions
        
        
        Image Preparation Functions
        
        
        Mesh Generation Functions
        
        
        Miscellaneous Functions
        
       
       
       PyQtGraph的圖形項目
       
        PlotDataItem
        
        
        PlotItem
        
        
        ImageItem
        
        
        GraphItem
        
        
        ViewBox
        
        
        LinearRegionItem
        
        
        InfiniteLine
        
        
        ROI
        
        
        GraphicsLayout
        
        
        PlotCurveItem
        
        
        ScatterPlotItem
        
        
        IsocurveItem
        
        
        AxisItem
        
        
        TextItem
        
        
        ErrorBarItem
        
        
        ArrowItem
        
        
        FillBetweenItem
        
        
        CurvePoint
        
        
        CurveArrow
        
        
        GridItem
        
        
        ScaleBar
        
        
        LabelItem
        
        
        VTickGroup
        
        
        LegendItem
        
        
        GradientEditorItem
        
        
        TickSliderItem
        
        
        HistogramLUTItem
        
        
        GradientLegend
        
        
        ButtonItem
        
        
        GraphicsObject
        
        
        GraphicsWidget
        
        
        GraphicsItem
        
        
        UIGraphicsItem
        
        
        GraphicsWidgetAnchor
        
       
       
       PyQtGraph的小部件
       
        PlotWidget
        
        
        ImageView
        
        
        dockarea module
        
        
        SpinBox
        
        
        GradientWidget
        
        
        HistogramLUTWidget
        
        
        parametertree module
        
        
        ConsoleWidget
        
        
        ColorMapWidget
        
        
        ScatterPlotWidget
        
        
        GraphicsView
        
        
        DataTreeWidget
        
        
        TableWidget
        
        
        TreeWidget
        
        
        CheckTable
        
        
        ColorButton
        
        
        GraphicsLayoutWidget
        
        
        ProgressDialog
        
        
        FileDialog
        
        
        JoystickButton
        
        
        MultiPlotWidget
        
        
        VerticalLabel
        
        
        RemoteGraphicsView
        
        
        MatplotlibWidget
        
        
        FeedbackButton
        
        
        ComboBox
        
        
        LayoutWidget
        
        
        PathButton
        
        
        ValueLabel
        
        
        BusyCursor
        
       
       
       PyQtGraph的3D圖形系統
       
        GLViewWidget
        
        
        GLGridItem
        
        
        GLSurfacePlotItem
        
        
        GLVolumeItem
        
        
        GLImageItem
        
        
        GLMeshItem
        
        
        GLLinePlotItem
        
        
        GLAxisItem
        
        
        GLGraphicsItem
        
        
        GLScatterPlotItem
        
        
        MeshData
        
       
       
       ColorMap色彩表
       
       
       Parameter Trees
       
        ParameterTree API Reference
        
       
       
       QGraphicsScene和鼠標事件
       
        GraphicsScene
        
        
        HoverEvent
        
        
        MouseClickEvent
        
        
        MouseDragEvent
        
       
       
       使用流程圖進行可視化編程
       
        flowchart.Flowchart
        
        
        flowchart.Node
        
        
        flowchart.Terminal
        
        
        Basic Use
        
        
        Implementing Custom Nodes
        
        
        Using Nodes Without Flowcharts
        
       
      17.1 全局配置選項
      PyQtGraph有幾個全局配置選項,允許您更改其默認行為。 可以使用 setConfigOptions() 和 getConfigOption()  函數訪問它們:
      選項
         類型
         默認
         
        leftButtonPan
         bool
         True
         如果為True,則在ViewBox上拖動鼠標左鍵會導致視圖被平移。 如果為False,則拖動鼠標左鍵會繪制一個ViewBox將縮放到的矩形。
        foreground
         
         See
         mkColor()
         
         ‘d’
         文本,線條,軸等的默認前景色
        background
         
         See
         mkColor()
         
         ‘k’
         GraphicsView的默認背景。
        antialias
         bool
         False
         啟用抗鋸齒功能會導致以平滑邊緣繪制線條,但會降低性能。
        imageAxisOrder
         str
         ‘col-major’
         對于“行主要”,圖像數據預期以標準行主(行,列)順序排列。 對于'col-major',圖像數據預期以反向列主要(列,行)順序。 向后兼容性的默認值為“col-major”,但將來可能會發生變化。
        editorCommand
         str or None
         None
         用于從ConsoleWidget調用代碼編輯器的命令。
        exitCleanup
         bool
         True
         嘗試解決PyQt和PySide中的一些退出崩潰錯誤。
        useWeave
         bool
         False
         如果可用,使用編織來加速某些操作。
        weaveDebug
         bool
         False
         如果編織編譯失敗,則打印完整錯誤消息。
        useOpenGL
         bool
         False
         在GraphicsView中啟用OpenGL。 這會對穩定性和性能產生不可預測的影響。
        enableExperimental
         bool
         False
         啟用實驗功能(好奇的人可以在代碼中搜索此密鑰)。
        crashWarning
         bool
         False
         如果為True,則打印有關可能導致崩潰的情況的警告。
        1.pyqtgraph.setConfigOptions(**opts)[source]
      設置全局配置選項。
      每個關鍵字參數設置一個全局選項。
      2.pyqtgraph.getConfigOption(opt)[source]
      返回單個全局配置選項
      ————————————————
      版權聲明:本文為CSDN博主「Suffering-」的原創文章,遵循 CC 4.0 BY-SA 版權協議,轉載請附上原文出處鏈接及本聲明。
      原文鏈接:https://blog.csdn.net/Eppley/article/details/82999998
      posted @ 2020-02-29 13:04  Inspire2020  閱讀(5302)  評論(0)    收藏  舉報
      主站蜘蛛池模板: 国产精品九九九一区二区| 国产一区二区三区粉嫩av| 大香伊蕉在人线国产最新2005| 99久久精品费精品国产一区二| 免费午夜无码片在线观看影院| 国产尤物AV尤物在线看| 国产成人一区二区免av| 亚洲中文精品久久久久久不卡 | 亚洲中文字幕国产综合| 国产色悠悠综合在线观看| 亚洲欧美自偷自拍视频图片| 精品无码久久久久成人漫画| 午夜精品极品粉嫩国产尤物| 偷窥盗摄国产在线视频| 亚洲一区二区三区av无码| 凹凸国产熟女精品视频| 蜜臀av一区二区三区日韩| 熟妇人妻无码中文字幕老熟妇| 久久久精品波多野结衣av | 日韩黄色av一区二区三区| 日韩乱码人妻无码中文字幕视频 | 欧美黑人添添高潮a片www| 精品国产精品中文字幕| 精品亚洲欧美高清不卡高清| 偷偷做久久久久免费网站| 99久久精品国产一区二区暴力| 四虎女优在线视频免费看| 久久国产精品老人性| 377P欧洲日本亚洲大胆| 石家庄市| 一区二区免费高清观看国产丝瓜 | 久久久av男人的天堂| 日夜啪啪一区二区三区| 日韩一区二区三区在线观院| 2020国产欧洲精品网站| 婷婷五月综合激情| 内地偷拍一区二区三区| 亚洲中文字幕日产无码成人片| 国产精品自在自线免费观看| 色就色中文字幕在线视频| 国产成人精品18|