最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python實(shí)現(xiàn)一個簡單的QQ截圖

 更新時間:2022年02月10日 16:22:11   作者:Also_easy  
大家好,本篇文章主要講的是Python實(shí)現(xiàn)一個簡單的QQ截圖,感興趣的同學(xué)趕快來看一看吧,對你有幫助的話記得收藏一下的相關(guān)資料

前言

  畢設(shè)有一部分要用到類似QQ截圖的功能,這里記錄制作過程。因?yàn)楹笃谝砑尤斯ぶ悄艿墓δ?,所以用python來寫桌面應(yīng)用。

一、需求分析

  可以簡單的將過程分為以下三步:

點(diǎn)擊按鈕或敲擊快捷鍵進(jìn)入截圖模式;在截圖模式通過鼠標(biāo)左鍵按壓/松開選取矩形區(qū)域;將矩形區(qū)域截圖保存到指定目錄或者剪貼板。

現(xiàn)在我將從第三步開始一步步向上搜索、編寫、驗(yàn)證。

二、截圖

  通過對“python”和“截圖”兩個關(guān)鍵字搜索不難發(fā)現(xiàn)python有多種滿足我們需求的函數(shù),這里選用PIL庫的grab()函數(shù)。time函數(shù)是用來測試截圖速度的。

from PIL import ImageGrab
import time

# 截取圖像
def catch_area(left, top, right, bottom):
    return ImageGrab.grab((left, top, right, bottom))
# 測試函數(shù)
def test():
    first = time.time()
    catch_area(101,101,200,300).save('D:/1.jpg')
    print(time.time() - first)

test()

三、矩形選擇

  截圖函數(shù)需要四個參數(shù),即矩形區(qū)域的上下左右的坐標(biāo)。為了獲取這四個參數(shù)我們需要監(jiān)聽鼠標(biāo)的點(diǎn)擊事件。我本來想搜尋一個全局監(jiān)聽器的api的,這里選用的是pyhook。但是測試發(fā)現(xiàn)不支持python2.7,而python3.7的安裝過程極其復(fù)雜,故放棄此方法。
  后來我想到可以利用GUI生成一個全屏的button,然后監(jiān)聽對這個button的點(diǎn)擊事件。這里的GUI選用wxPython,3.7版本直接pip安裝。

import wx
from PIL import ImageGrab

class ScreenShot(wx.Frame):
    left,right,top,bottom = 0,0,0,0
    img = None

    def __init__(self, parent):
        wx.Frame.__init__(self, parent,
            style = wx.MAXIMIZE # 全屏顯示
        )
        # 設(shè)置背景色
        self.SetBackgroundColour((255,255,255))
        # 設(shè)置透明度
        self.SetTransparent(30)
        # 注冊事件
        self.Bind(wx.EVT_LEFT_DOWN, self.OnDown, self)
        self.Bind(wx.EVT_LEFT_UP, self.OnUp, self)
        # 顯示button
        self.Show(True)

    def OnDown(self, event):
        pos = event.GetPosition()
        self.top = pos.y
        self.left = pos.x
        
    def OnUp(self, event):
        pos = event.GetPosition()
        self.bottom = pos.y
        self.right = pos.x
        
        print(self.left, self.top, self.right, self.bottom)
        self.img = self.catch_area(
            self.left, self.top, self.right, self.bottom)
        # 截圖完畢后關(guān)閉button
        self.Close(False)

    def catch_area(self, left, top, right, bottom):
        return ImageGrab.grab((left, top, right, bottom))
        
# 測試用例
# app = wx.App(False)
# frame = ScreenShot(None)
# app.MainLoop()

這里只是將截得圖像存在img變量中,至于后續(xù)操作請各位自行實(shí)現(xiàn)。

四、按鈕設(shè)置

  最后需要構(gòu)造一個按鈕并為其設(shè)置快捷鍵/熱鍵。GUI同樣使用之前的wxPython。頁面就隨便寫寫;設(shè)置快捷鍵即為某個控件綁定鍵盤事件,需要將焦點(diǎn)聚集到某個控件上;而熱鍵是可以全局使用,熱鍵設(shè)置可將事件綁定到菜單選項(xiàng)上,也可以直接注冊。這里直接注冊熱鍵。

import wx
import ScreenShot as SS

class MainWindow(wx.Frame):
    def __init__(self, parent):
        # 視窗屬性
        wx.Frame.__init__(self, parent,
            size = (1000, 200),         # 視窗大小
            style = wx.CLIP_CHILDREN,   # 視窗樣式,這個樣式可以去掉原生的標(biāo)題欄
            #pos = (200, 200)           # 視窗位置,下面設(shè)置居中了
        )
        # 創(chuàng)建位于窗口的底部的狀態(tài)欄
        self.CreateStatusBar()
        # 布局
        self.root = wx.BoxSizer(wx.VERTICAL)
        self.menu = wx.BoxSizer(wx.HORIZONTAL)
        self.body = wx.BoxSizer(wx.VERTICAL)
        self.menuText = [u"開始截圖", u"退出"]
        self.menubuttons = []
        for i in range(0, 2):
            # 新建按鍵
            self.menubuttons.append(wx.Button(self, -1, self.menuText[i]))
            self.menu.Add(self.menubuttons[i], 1, wx.SHAPED)
        # 新建只讀文本框(預(yù)留)
        self.control = wx.TextCtrl(self, style = wx.TE_READONLY)
        self.body.Add(self.control, 1, wx.GROW)
        self.root.Add(self.menu, 1, wx.GROW)
        self.root.Add(self.body, 4, wx.EXPAND)
        # 激活布局
        self.SetSizer(self.root)
        self.SetAutoLayout(True)
        # self.root.Fit(self) # 適應(yīng)內(nèi)部大小
        # 事件注冊
        self.Bind(wx.EVT_BUTTON, self.OnStart, self.menubuttons[0])
        self.Bind(wx.EVT_BUTTON, self.OnExit, self.menubuttons[1])
        # 熱鍵注冊
        self.hotkey = wx.NewIdRef()  # 創(chuàng)建id
        self.RegisterHotKey(self.hotkey, wx.MOD_CONTROL, ord('Q'))  # 注冊熱鍵(按ctrl+Q鍵響應(yīng))
        self.Bind(wx.EVT_HOTKEY, self.OnKeyBoard, id=self.hotkey)   # 綁定熱鍵事件
        # 窗口居中
        self.Center()
        # 顯示視窗
        self.Show(True)

    # 開始截圖
    def OnStart(self, event):
        SS.ScreenShot(self)

    # 關(guān)閉整個應(yīng)用
    def OnExit(self, event):
        self.Destroy()    

    # 熱鍵事件
    def OnKeyBoard(self, event):
        SS.ScreenShot(self)

app = wx.App(False)
frame = MainWindow(None)
app.MainLoop()

總結(jié)

  最后兩個代碼塊就是完整應(yīng)用。這只是一個十分粗略的應(yīng)用,很多細(xì)節(jié)都沒有優(yōu)化,比如最小化到托盤、選取區(qū)域時自動標(biāo)出區(qū)域。若各位有能力可自行實(shí)現(xiàn)。到此這篇關(guān)于Python實(shí)現(xiàn)一個簡單的QQ截圖的文章就介紹到這了,更多相關(guān)python QQ截圖內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

 

您可能感興趣的文章:

相關(guān)文章

  • Python灰度變換中的對數(shù)變換專項(xiàng)分析實(shí)現(xiàn)

    Python灰度變換中的對數(shù)變換專項(xiàng)分析實(shí)現(xiàn)

    灰度變換是指根據(jù)某種目標(biāo)條件按一定變換關(guān)系逐點(diǎn)改變源圖像中每個像素灰度值的方法。目的是改善畫質(zhì),使圖像顯示效果更加清晰。圖像的灰度變換處理是圖像增強(qiáng)處理技術(shù)中的一種非?;A(chǔ)、直接的空間域圖像處理方法,也是圖像數(shù)字化軟件和圖像顯示軟件的一個重要組成部分
    2022-10-10
  • Python 類的特殊成員解析

    Python 類的特殊成員解析

    這篇文章主要介紹了Python 類的特殊成員介紹,本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2018-06-06
  • python爬蟲xpath模塊簡介示例代碼

    python爬蟲xpath模塊簡介示例代碼

    xpath是最常用且最便捷高效的一種解析方式,通用型強(qiáng),其不僅可以用于python語言中,還可以用于其他語言中,數(shù)據(jù)解析建議首先xpath,這篇文章主要介紹了python爬蟲xpath模塊簡介,需要的朋友可以參考下
    2023-02-02
  • Python中XML轉(zhuǎn)JSON、XML轉(zhuǎn)字典代碼示例

    Python中XML轉(zhuǎn)JSON、XML轉(zhuǎn)字典代碼示例

    大家都知道python的字典和json類似,那么可不可以先將xml轉(zhuǎn)換成json再去做其他的事情呢,下面這篇文章主要給大家介紹了關(guān)于Python中XML轉(zhuǎn)JSON、XML轉(zhuǎn)字典的相關(guān)資料,需要的朋友可以參考下
    2024-02-02
  • python實(shí)現(xiàn)最長公共子序列

    python實(shí)現(xiàn)最長公共子序列

    這篇文章主要為大家詳細(xì)介紹了python實(shí)現(xiàn)最長公共子序列的相關(guān)代碼,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-05-05
  • MacOS(M1芯片?arm架構(gòu))下安裝tensorflow的詳細(xì)過程

    MacOS(M1芯片?arm架構(gòu))下安裝tensorflow的詳細(xì)過程

    這篇文章主要介紹了MacOS(M1芯片?arm架構(gòu))下如何安裝tensorflow,本節(jié)使用的版本是tensorflow2.4?python3.8,因此并未安裝加速插件,本文結(jié)合實(shí)例代碼詳細(xì)講解,需要的朋友可以參考下
    2023-02-02
  • Python隨機(jī)生成一個6位的驗(yàn)證碼代碼分享

    Python隨機(jī)生成一個6位的驗(yàn)證碼代碼分享

    這篇文章主要介紹了Python隨機(jī)生成一個6位的驗(yàn)證碼代碼分享,本文直接給出代碼實(shí)例,需要的朋友可以參考下
    2015-03-03
  • python tqdm用法及實(shí)例詳解

    python tqdm用法及實(shí)例詳解

    在本篇文章里小編給大家整理的是一篇關(guān)于python tqdm用法及實(shí)例詳解內(nèi)容,有需要的朋友們可以學(xué)習(xí)下。
    2021-06-06
  • python使用時間間隔的操作及技巧分享

    python使用時間間隔的操作及技巧分享

    Python 中處理時間間隔和日期時間的操作通常涉及 datetime 模塊,它提供了豐富的功能來處理日期和時間,本文給大家介紹了一些關(guān)于時間間隔操作的技巧和示例,并通過代碼示例介紹的非常詳細(xì),需要的朋友可以參考下
    2024-12-12
  • Python3網(wǎng)絡(luò)爬蟲開發(fā)實(shí)戰(zhàn)之極驗(yàn)滑動驗(yàn)證碼的識別

    Python3網(wǎng)絡(luò)爬蟲開發(fā)實(shí)戰(zhàn)之極驗(yàn)滑動驗(yàn)證碼的識別

    本節(jié)我們的目標(biāo)是用程序來識別并通過極驗(yàn)驗(yàn)證碼的驗(yàn)證,其步驟有分析識別思路、識別缺口位置、生成滑塊拖動路徑,最后模擬實(shí)現(xiàn)滑塊拼合通過驗(yàn)證。需要的朋友可以參考下
    2019-08-08

最新評論

六枝特区| 桃园市| 建水县| 钟祥市| 德令哈市| 三穗县| 贵定县| 大荔县| 福州市| 元阳县| 丰原市| 连平县| 镇巴县| 新田县| 石狮市| 商城县| 永善县| 县级市| 曲周县| 花莲县| 永福县| 西峡县| 凤翔县| 库车县| 涿鹿县| 运城市| 乌兰县| 宁海县| 新邵县| 江口县| 山阳县| 当雄县| 卢龙县| 黔东| 临汾市| 商水县| 青龙| 台前县| 丽水市| 石棉县| 屯昌县|