2014-02-06 40 views
1

我想出瞭如何在PySide QT中獲取小部件的屏幕截圖,但它不包含非客戶區域,例如標題欄和邊框。如何截取PySide窗口的小部件,幷包含標題欄和邊框

def screenCaptureWidget(widget, filename, fileformat='png'): 
    pixmap = QtGui.QPixmap.grabWidget(widget) 
    pixmap.save(filename, fileformat) 

兩個問題:

  • 我怎麼包括非工作區?
  • 如何獲得窗口矩形相對於其客戶區(0,0)點的幾何?

回答

1

我想我找到了答案,以這兩個問題,尋找QWidget.geometry()QWidget.frameGeometry(),這給客戶和非客戶區的屏幕座標(作爲查閱QRect),分別後。

def getRelativeFrameGeometry(widget): 
    g = widget.geometry() 
    fg = widget.frameGeometry() 
    return fg.translated(-g.left(),-g.top()) 

def screenCaptureWidget(widget, filename, fileformat='png'): 
    rfg = getRelativeFrameGeometry(widget) 
    pixmap = QtGui.QPixmap.grabWindow(widget.winId(), 
             rfg.left(), rfg.top(), 
             rfg.width(), rfg.height()) 
    pixmap.save(filename, fileformat)   
相關問題