国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Python > 正文

Pyqt實現無邊框窗口拖動以及窗口大小改變

2020-02-22 23:45:09
字體:
來源:轉載
供稿:網友

本文實例為大家分享了Pyqt實現無邊框窗口拖動及大小改變的具體代碼,供大家參考,具體內容如下

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

根據網上某位仁兄Qt的實現轉過來的大笑,上完整代碼

# 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 #鼠標左鍵是否按下     self.dragPosition=0   #拖動時坐標     self.Numbers = self.enum(UP=0, DOWN=1, LEFT=2, RIGHT=3, LEFTTOP=4, LEFTBOTTOM=5, RIGHTBOTTOM=6, RIGHTTOP=7, NONE=8) #枚舉參數     self.setMinimumHeight(500) #窗體最小高度     self.setMinimumWidth(1000) #窗體最小寬度     self.dir=self.Numbers.NONE #初始鼠標狀態     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))  #下    #枚舉參數   def enum(self,**enums):     return type('Enum', (), enums)    def region(self,cursorGlobalPoint):     #獲取窗體在屏幕上的位置區域,tl為topleft點,rb為rightbottom點     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))  #設置鼠標形狀     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:       #默認       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_())             
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 綦江县| 保定市| 信宜市| 海南省| 柞水县| 加查县| 绥化市| 会理县| 额济纳旗| 娱乐| 通州市| 北辰区| 乐清市| 尖扎县| 廊坊市| 体育| 紫金县| 浪卡子县| 眉山市| 望奎县| 新民市| 河北省| 通许县| 北辰区| 望奎县| 克拉玛依市| 祁阳县| 页游| 苏尼特右旗| 大方县| 搜索| 当雄县| 芒康县| 宣恩县| 新丰县| 崇仁县| 凤庆县| 柳河县| 鄢陵县| 平邑县| 海兴县|