欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Pyqt實(shí)現(xiàn)無(wú)邊框窗口拖動(dòng)以及窗口大小改變

 更新時(shí)間:2018年04月19日 17:14:58   作者:飛奔的貓  
這篇文章主要為大家詳細(xì)介紹了Pyqt實(shí)現(xiàn)無(wú)邊框窗口拖動(dòng)及大小改變的方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下

本文實(shí)例為大家分享了Pyqt實(shí)現(xiàn)無(wú)邊框窗口拖動(dòng)及大小改變的具體代碼,供大家參考,具體內(nèi)容如下

做個(gè)記錄,繪制邊框陰影可以忽略這里不是主要

根據(jù)網(wǎng)上某位仁兄Qt的實(shí)現(xiàn)轉(zhuǎn)過(guò)來(lái)的大笑,上完整代碼

# coding:utf-8 
from PyQt4.Qt import * 
import sys 
 
PADDING=4  
sys.setrecursionlimit(10000) 
class ShadowWidget(QWidget): 
  def __init__(self,parent=None): 
    super(ShadowWidget,self).__init__(parent) 
    self.setWindowFlags(Qt.FramelessWindowHint|Qt.WindowSystemMenuHint) 
    self.setAttribute(Qt.WA_TranslucentBackground) 
    self.SHADOW_WIDTH=0  #邊框距離 
    self.isLeftPressDown = False #鼠標(biāo)左鍵是否按下 
    self.dragPosition=0   #拖動(dòng)時(shí)坐標(biāo) 
    self.Numbers = self.enum(UP=0, DOWN=1, LEFT=2, RIGHT=3, LEFTTOP=4, LEFTBOTTOM=5, RIGHTBOTTOM=6, RIGHTTOP=7, NONE=8) #枚舉參數(shù) 
    self.setMinimumHeight(500) #窗體最小高度 
    self.setMinimumWidth(1000) #窗體最小寬度 
    self.dir=self.Numbers.NONE #初始鼠標(biāo)狀態(tài) 
    self.setMouseTracking(True) 
 
  #繪制邊框陰影 
  def drawShadow(self,painter): 
    #繪制左上角、左下角、右上角、右下角、上、下、左、右邊框 
    self.pixmaps=QStringList() 
    self.pixmaps.append(QString("./img/border/left_top.png")) 
    self.pixmaps.append(QString("./img/border/left_bottom.png")) 
    self.pixmaps.append(QString("./img/border/right_top.png")) 
    self.pixmaps.append(QString("./img/border/right_bottom.png")) 
    self.pixmaps.append(QString("./img/border/top_mid.png")) 
    self.pixmaps.append(QString("./img/border/bottom_mid.png")) 
    self.pixmaps.append(QString("./img/border/left_mid.png")) 
    self.pixmaps.append(QString("./img/border/right_mid.png")) 
    painter.drawPixmap(0, 0, self.SHADOW_WIDTH, self.SHADOW_WIDTH, QPixmap(self.pixmaps[0]))  #左上角 
    painter.drawPixmap(self.width()-self.SHADOW_WIDTH, 0, self.SHADOW_WIDTH, self.SHADOW_WIDTH, QPixmap(self.pixmaps[2]))  #右上角 
    painter.drawPixmap(0,self.height()-self.SHADOW_WIDTH, self.SHADOW_WIDTH, self.SHADOW_WIDTH, QPixmap(self.pixmaps[1]))  #左下角 
    painter.drawPixmap(self.width()-self.SHADOW_WIDTH, self.height()-self.SHADOW_WIDTH, self.SHADOW_WIDTH, self.SHADOW_WIDTH, QPixmap(self.pixmaps[3])) #右下角 
    painter.drawPixmap(0, self.SHADOW_WIDTH, self.SHADOW_WIDTH, self.height()-2*self.SHADOW_WIDTH, QPixmap(self.pixmaps[6]).scaled(self.SHADOW_WIDTH, self.height()-2*self.SHADOW_WIDTH)) #左 
    painter.drawPixmap(self.width()-self.SHADOW_WIDTH, self.SHADOW_WIDTH, self.SHADOW_WIDTH, self.height()-2*self.SHADOW_WIDTH, QPixmap(self.pixmaps[7]).scaled(self.SHADOW_WIDTH, self.height()- 2*self.SHADOW_WIDTH)) #右 
    painter.drawPixmap(self.SHADOW_WIDTH, 0, self.width()-2*self.SHADOW_WIDTH, self.SHADOW_WIDTH, QPixmap(self.pixmaps[4]).scaled(self.width()-2*self.SHADOW_WIDTH, self.SHADOW_WIDTH)) #上 
    painter.drawPixmap(self.SHADOW_WIDTH, self.height()-self.SHADOW_WIDTH, self.width()-2*self.SHADOW_WIDTH, self.SHADOW_WIDTH, QPixmap(self.pixmaps[5]).scaled(self.width()-2*self.SHADOW_WIDTH, self.SHADOW_WIDTH))  #下 
 
  #枚舉參數(shù) 
  def enum(self,**enums): 
    return type('Enum', (), enums) 
 
  def region(self,cursorGlobalPoint): 
    #獲取窗體在屏幕上的位置區(qū)域,tl為topleft點(diǎn),rb為rightbottom點(diǎn) 
    rect = self.rect() 
    tl = self.mapToGlobal(rect.topLeft()) 
    rb = self.mapToGlobal(rect.bottomRight()) 
 
    x = cursorGlobalPoint.x() 
    y = cursorGlobalPoint.y() 
 
    if(tl.x() + PADDING >= x and tl.x() <= x and tl.y() + PADDING >= y and tl.y() <= y): 
      #左上角 
      self.dir = self.Numbers.LEFTTOP 
      self.setCursor(QCursor(Qt.SizeFDiagCursor))  #設(shè)置鼠標(biāo)形狀 
    elif(x >= rb.x() - PADDING and x <= rb.x() and y >= rb.y() - PADDING and y <= rb.y()): 
      #右下角 
      self.dir = self.Numbers.RIGHTBOTTOM 
      self.setCursor(QCursor(Qt.SizeFDiagCursor)) 
    elif(x <= tl.x() + PADDING and x >= tl.x() and y >= rb.y() - PADDING and y <= rb.y()): 
      #左下角 
      self.dir = self.Numbers.LEFTBOTTOM 
      self.setCursor(QCursor(Qt.SizeBDiagCursor)) 
    elif(x <= rb.x() and x >= rb.x() - PADDING and y >= tl.y() and y <= tl.y() + PADDING): 
      #右上角 
      self.dir = self.Numbers.RIGHTTOP 
      self.setCursor(QCursor(Qt.SizeBDiagCursor)) 
    elif(x <= tl.x() + PADDING and x >= tl.x()): 
      #左邊 
      self.dir = self.Numbers.LEFT 
      self.setCursor(QCursor(Qt.SizeHorCursor)) 
    elif( x <= rb.x() and x >= rb.x() - PADDING): 
      #右邊 
 
      self.dir = self.Numbers.RIGHT 
      self.setCursor(QCursor(Qt.SizeHorCursor)) 
    elif(y >= tl.y() and y <= tl.y() + PADDING): 
      #上邊 
      self.dir = self.Numbers.UP 
      self.setCursor(QCursor(Qt.SizeVerCursor)) 
    elif(y <= rb.y() and y >= rb.y() - PADDING): 
      #下邊 
      self.dir = self.Numbers.DOWN 
      self.setCursor(QCursor(Qt.SizeVerCursor)) 
    else: 
      #默認(rèn) 
      self.dir = self.Numbers.NONE 
      self.setCursor(QCursor(Qt.ArrowCursor)) 
 
  def mouseReleaseEvent(self,event): 
    if(event.button() == Qt.LeftButton): 
      self.isLeftPressDown = False 
      if(self.dir != self.Numbers.NONE): 
        self.releaseMouse() 
        self.setCursor(QCursor(Qt.ArrowCursor)) 
 
  def mousePressEvent(self,event): 
    if(event.button()==Qt.LeftButton): 
      self.isLeftPressDown=True 
      if(self.dir != self.Numbers.NONE): 
        self.mouseGrabber() 
      else: 
        self.dragPosition = event.globalPos() - self.frameGeometry().topLeft() 
 
  def mouseMoveEvent(self,event): 
    gloPoint = event.globalPos() 
    rect = self.rect() 
    tl = self.mapToGlobal(rect.topLeft()) 
    rb = self.mapToGlobal(rect.bottomRight()) 
 
    if(not self.isLeftPressDown): 
      self.region(gloPoint)  
    else: 
      if(self.dir != self.Numbers.NONE): 
        rmove=QRect(tl, rb) 
        if(self.dir==self.Numbers.LEFT): 
          if(rb.x() - gloPoint.x() <= self.minimumWidth()): 
            rmove.setX(tl.x()) 
          else: 
            rmove.setX(gloPoint.x()) 
        elif(self.dir==self.Numbers.RIGHT): 
          print u"youbian" 
          rmove.setWidth(gloPoint.x() - tl.x()) 
        elif(self.dir==self.Numbers.UP): 
          if(rb.y() - gloPoint.y() <= self.minimumHeight()): 
            rmove.setY(tl.y()) 
          else: 
            rmove.setY(gloPoint.y()) 
        elif(self.dir==self.Numbers.DOWN): 
          rmove.setHeight(gloPoint.y() - tl.y()) 
        elif(self.dir==self.Numbers.LEFTTOP): 
          if(rb.x() - gloPoint.x() <= self.minimumWidth()): 
            rmove.setX(tl.x()) 
          else: 
            rmove.setX(gloPoint.x()) 
          if(rb.y() - gloPoint.y() <= self.minimumHeight()): 
            rmove.setY(tl.y()) 
          else: 
            rmove.setY(gloPoint.y()) 
        elif(self.dir==self.Numbers.RIGHTTOP): 
          rmove.setWidth(gloPoint.x() - tl.x()) 
          rmove.setY(gloPoint.y()) 
        elif(self.dir==self.Numbers.LEFTBOTTOM): 
          rmove.setX(gloPoint.x()) 
          rmove.setHeight(gloPoint.y() - tl.y()) 
        elif(self.dir==self.Numbers.RIGHTBOTTOM): 
          rmove.setWidth(gloPoint.x() - tl.x()) 
          rmove.setHeight(gloPoint.y() - tl.y()) 
        else: 
          pass 
        self.setGeometry(rmove) 
      else: 
        self.move(event.globalPos() - self.dragPosition) 
        event.accept() 
 
if __name__ == '__main__': 
  app = QApplication(sys.argv) 
  shadow = ShadowWidget() 
  shadow.show() 
  sys.exit(app.exec_()) 

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • Python實(shí)現(xiàn)七大查找算法的示例代碼

    Python實(shí)現(xiàn)七大查找算法的示例代碼

    這篇文章主要介紹了Python實(shí)現(xiàn)七大查找算法的示例代碼,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-04-04
  • Python封裝zabbix-get接口的代碼分享

    Python封裝zabbix-get接口的代碼分享

    Zabbix?是一款強(qiáng)大的開(kāi)源網(wǎng)管監(jiān)控工具,該工具的客戶端與服務(wù)端是分開(kāi)的,我們可以直接使用自帶的zabbix_get命令來(lái)實(shí)現(xiàn)拉取客戶端上的各種數(shù)據(jù)。本文為大家分享了Python封裝zabbix-get接口的示例代碼,感興趣的可以了解一下
    2022-07-07
  • Python中的復(fù)雜數(shù)據(jù)類型(list、tuple)

    Python中的復(fù)雜數(shù)據(jù)類型(list、tuple)

    這篇文章介紹了Python中的復(fù)雜數(shù)據(jù)類型(list、tuple),文中通過(guò)示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-05-05
  • 如何提高python 中for循環(huán)的效率

    如何提高python 中for循環(huán)的效率

    這篇文章主要介紹了如何提高python 中for循環(huán)的效率,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-04-04
  • 基于Python實(shí)現(xiàn)四維圖像繪制系統(tǒng)

    基于Python實(shí)現(xiàn)四維圖像繪制系統(tǒng)

    這篇文章主要為大家詳細(xì)介紹了如何基于Python語(yǔ)言實(shí)現(xiàn)一個(gè)簡(jiǎn)單的四維圖像繪制系統(tǒng),文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2023-09-09
  • 7個(gè)實(shí)用的Python自動(dòng)化代碼別再重復(fù)造輪子了

    7個(gè)實(shí)用的Python自動(dòng)化代碼別再重復(fù)造輪子了

    關(guān)于Python有一句名言:不要重復(fù)造輪子,給大家分享經(jīng)過(guò)Python3.6.4調(diào)試通過(guò)的代碼,感興趣的朋友跟隨小編一起看看吧
    2023-11-11
  • python3基于TCP實(shí)現(xiàn)CS架構(gòu)文件傳輸

    python3基于TCP實(shí)現(xiàn)CS架構(gòu)文件傳輸

    這篇文章主要為大家詳細(xì)介紹了python3基于TCP實(shí)現(xiàn)CS架構(gòu)文件傳輸,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-07-07
  • 使用IPython或Spyder將省略號(hào)表示的內(nèi)容完整輸出

    使用IPython或Spyder將省略號(hào)表示的內(nèi)容完整輸出

    這篇文章主要介紹了使用IPython或Spyder將省略號(hào)表示的內(nèi)容完整輸出,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-04-04
  • python基于K-means聚類算法的圖像分割

    python基于K-means聚類算法的圖像分割

    這篇文章主要介紹了python基于K-means聚類算法的圖像分割,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-10-10
  • 恢復(fù)百度云盤(pán)本地誤刪的文件腳本(簡(jiǎn)單方法)

    恢復(fù)百度云盤(pán)本地誤刪的文件腳本(簡(jiǎn)單方法)

    下面小編就為大家?guī)?lái)一篇恢復(fù)百度云盤(pán)本地誤刪的文件腳本(簡(jiǎn)單方法)。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-10-10

最新評(píng)論