如何通过Pyqt 或者PySide 在电脑上直接显示手机屏幕。

1:首先,怎样获得手机屏幕,有2种方式,一种是直接使用adb  shell screencap -p获取,这个优点是简单,方便,但速度不够快,另外一个方式,通过Android 隐藏的API surface来实现,优点是:截图只需要十几ms,但需要在手机上写apk。

抓图实现如下:(以window 系统为例)

def updatePic(mainWindow):
    while True:
        os.system('adb wait-for-device')

      #截图保存到手机sdcard 的pic 目录下。
        cmd='adb shell screencap -p /sdcard/pic/temp_a.png '
        subprocess.Popen(cmd,stdout=subprocess.PIPE,shell=True).wait()
        cmdpic="adb pull  /sdcard/pic/temp_a.png  F:\\android\\new_test "

    # 把截图拖到PC上。
        subprocess.Popen(cmdpic,stdout=subprocess.PIPE,shell=True).wait()

# 截图完成后,让窗口刷新截图。
        mainWindow.mySignal.emit('temp_a.png')

完整的其他部分如下:

from PySide.QtGui import *
import sys,os
from PySide.QtCore import *
#定义:class MyView

class MyView(QGraphicsView):
    mySignal = Signal(str)
    def __init__(self):
        QGraphicsView.__init__(self)
        self.myScene = QGraphicsScene(self)       
        self.setScene(self.myScene) 
        self.pixmap=QPixmap()
       
        self.pixmap.load("temp_a.png")
        self.pixmap=self.pixmap.scaled(400, 500, Qt.KeepAspectRatio)
        self.myScene.addPixmap(self.pixmap)

# 通过mySignal把addpixmap 与UpdatePic1 链接起来。实现自动刷新图片
        self.mySignal.connect(self.UpdatePic1)
       
       

    def UpdatePic1(self, text):
        self.pixmap.load(text)
        self.pixmap=self.pixmap.scaled(400, 500, Qt.KeepAspectRatio)     
  
        self.myScene.addPixmap(self.pixmap)

if __name__=='__main__':
   
  
    app=QApplication(sys.argv)

    mainWindow=MyView()
    mainWindow.show()
    t=threading.Thread(target=updatePic,args=(mainWindow,))
    t.start()
    sys.exit(app.exec_())


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值