一文詳解PyQt5中實(shí)現(xiàn)不規(guī)則窗口的顯示
PyQt5 不規(guī)則窗口的顯示
函數(shù) | 描述 |
---|---|
setMask(self, QBitmap) setMask(self, QRegion) | setMask()的作用是為調(diào)用它的控件增加一個(gè)遮罩,遮住所選區(qū)域以外的部分,使之看起來是透明的。它的參數(shù)可以為QBitmap或QRegion對(duì)象。 |
paintEvent(self, QPaintEvent) | 通過重載paintEvent()函數(shù)繪制窗口背景 |
QPixmap和QBitmap繪圖的效果對(duì)比
import sys from PyQt5.QtWidgets import QApplication, QWidget from PyQt5.QtGui import QPixmap, QPainter, QBitmap class MyForm(QWidget): def __init__(self, parent=None): super(MyForm, self).__init__(parent) self.setWindowTitle("不規(guī)則窗口的實(shí)現(xiàn)例子") def paintEvent(self, event): painter = QPainter(self) painter.drawPixmap(0, 0, 280, 390, QPixmap(r"./pyqt5/images/dog.jpg")) painter.drawPixmap(300, 0, 280, 390, QBitmap(r"./pyqt5/images/dog.jpg")) if __name__ == "__main__": app = QApplication(sys.argv) form = MyForm() form.show() sys.exit(app.exec_())
不可以拖動(dòng)的不規(guī)則窗口
import sys from PyQt5.QtWidgets import QApplication, QWidget from PyQt5.QtGui import QPixmap, QPainter, QBitmap class WinForm(QWidget): def __init__(self, parent=None): super(WinForm, self).__init__(parent) self.setWindowTitle("不規(guī)則窗口的實(shí)現(xiàn)例子") self.pix = QBitmap("./pyqt5/images/mask.png") self.resize(self.pix.size()) self.setMask(self.pix) def paintEvent(self, event): painter = QPainter(self) # 在指定區(qū)域直接繪制窗口背景 painter.drawPixmap(0, 0, self.pix.width(), self.pix.height(), QPixmap("./pyqt5/images/screen1.jpg")) if __name__ == "__main__": app = QApplication(sys.argv) win = WinForm() win.show() sys.exit(app.exec_())
可以拖動(dòng)的不規(guī)則窗口
import sys from PyQt5.QtWidgets import QApplication ,QWidget from PyQt5.QtGui import QPixmap, QPainter , QCursor , QBitmap from PyQt5.QtCore import Qt class ShapeWidget(QWidget): def __init__(self,parent=None): super(ShapeWidget,self).__init__(parent) self.setWindowTitle("不規(guī)則的,可以拖動(dòng)的窗體實(shí)現(xiàn)例子") self.mypix() # 顯示不規(guī)則 pic def mypix(self): self.pix = QBitmap( "./pyqt5/images/mask.png" ) self.resize(self.pix.size()) self.setMask(self.pix) print( self.pix.size()) self.dragPosition = None # 重定義鼠標(biāo)按下響應(yīng)函數(shù)mousePressEvent(QMouseEvent)和鼠標(biāo)移動(dòng)響應(yīng)函數(shù)mouseMoveEvent(QMouseEvent),使不規(guī)則窗體能響應(yīng)鼠標(biāo)事件,隨意拖動(dòng)。 def mousePressEvent(self, event): if event.button() == Qt.LeftButton: self.m_drag=True self.m_DragPosition=event.globalPos()-self.pos() event.accept() self.setCursor(QCursor(Qt.OpenHandCursor)) if event.button()==Qt.RightButton: self.close() def mouseMoveEvent(self, QMouseEvent): if Qt.LeftButton and self.m_drag: # 當(dāng)左鍵移動(dòng)窗體修改偏移值 self.move(QMouseEvent.globalPos()- self.m_DragPosition ) QMouseEvent.accept() def mouseReleaseEvent(self, QMouseEvent): self.m_drag=False self.setCursor(QCursor(Qt.ArrowCursor)) #一般 paintEvent 在窗體首次繪制加載, 要重新加載paintEvent 需要重新加載窗口使用 self.update() or self.repaint() def paintEvent(self, event): painter = QPainter(self) painter.drawPixmap(0,0,self.width(),self.height(),QPixmap("./pyqt5/images/boy.png")) if __name__ == '__main__': app=QApplication(sys.argv) form=ShapeWidget() form.show() app.exec_()
不規(guī)則窗口實(shí)現(xiàn)動(dòng)畫效果
import sys from PyQt5.QtWidgets import QApplication, QWidget from PyQt5.QtGui import QPixmap, QPainter, QCursor from PyQt5.QtCore import Qt, QTimer class ShapeWidget(QWidget): def __init__(self, parent=None): super(ShapeWidget, self).__init__(parent) self.i = 1 self.mypix() self.timer = QTimer() self.timer.setInterval(500) # 定時(shí)器每500毫秒更新一次 self.timer.timeout.connect(self.timeChange) self.timer.start() # 顯示不規(guī)則圖片 def mypix(self): self.update() if self.i == 5: self.i = 1 self.mypic = {1:'./pyqt5/images/left.png', 2:'./pyqt5/images/up.png', 3:'./pyqt5/images/right.png', 4:'./pyqt5/images/down.png'} self.pix = QPixmap(self.mypic[self.i], "0", Qt.AvoidDither | Qt.ThresholdDither | Qt.ThresholdAlphaDither) self.resize(self.pix.size()) self.setMask(self.pix.mask()) self.dragPosition = None def mousePressEvent(self, event): if event.button() == Qt.LeftButton: self.m_drag = True self.m_DragPosition = event.globalPos() - self.pos() event.accept() self.setCursor(QCursor(Qt.OpenHandCursor)) def mouseMoveEvent(self, QMouseEvent): if Qt.LeftButton and self.m_drag: self.move(QMouseEvent.globalPos() - self.m_DragPosition) QMouseEvent.accept() def mouseReleaseEvent(self, QMouseEvent): self.m_drag = False self.setCursor(QCursor(Qt.ArrowCursor)) def paintEvent(self, event): painter = QPainter(self) painter.drawPixmap(0, 0, self.pix.width(), self.pix.height(), self.pix) def mouseDoubleClickEvent(self, event): if event.button() == 1: self.i += 1 self.mypix() def timeChange(self): self.i += 1 self.mypix() if __name__ == "__main__": app = QApplication(sys.argv) win = ShapeWidget() win.show() sys.exit(app.exec_())
加載GIF動(dòng)畫效果
import sys from PyQt5.QtWidgets import QApplication, QLabel, QWidget from PyQt5.QtCore import Qt from PyQt5.QtGui import QMovie class LoadingGifWin(QWidget): def __init__(self, parent=None): super(LoadingGifWin, self).__init__(parent) self.label = QLabel('', self) self.setFixedSize(128, 128) self.setWindowFlags(Qt.Dialog | Qt.CustomizeWindowHint) self.movie = QMovie("./pyqt5/images/loading.gif") self.label.setMovie(self.movie) self.movie.start() if __name__ == "__main__": app = QApplication(sys.argv) win = LoadingGifWin() win.show() sys.exit(app.exec_())
到此這篇關(guān)于一文詳解PyQt5中實(shí)現(xiàn)不規(guī)則窗口的顯示的文章就介紹到這了,更多相關(guān)PyQt5不規(guī)則窗口顯示內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
OpenCV實(shí)戰(zhàn)記錄之基于分水嶺算法的圖像分割
在機(jī)器視覺中,有時(shí)需要對(duì)產(chǎn)品進(jìn)行檢測(cè)和計(jì)數(shù),其難點(diǎn)無非是對(duì)于產(chǎn)品的圖像分割,這篇文章主要給大家介紹了關(guān)于OpenCV實(shí)戰(zhàn)記錄之基于分水嶺算法的圖像分割的相關(guān)資料,需要的朋友可以參考下2023-02-02利用Python將時(shí)間或時(shí)間間隔轉(zhuǎn)為ISO 8601格式方法示例
國(guó)際標(biāo)準(zhǔn)化組織的國(guó)際標(biāo)準(zhǔn)ISO8601是日期和時(shí)間的表示方法,全稱為《數(shù)據(jù)存儲(chǔ)和交換形式·信息交換·日期和時(shí)間的表示方法》,下面這篇文章主要給大家介紹了關(guān)于利用Python將時(shí)間或時(shí)間間隔轉(zhuǎn)為ISO 8601格式的相關(guān)資料,需要的朋友可以參考下。2017-09-09使用setup.py安裝python包和卸載python包的方法
這篇文章主要介紹了使用setup.py安裝python包和卸載python包的方法,大家參考使用吧2013-11-11Python利用Matplotlib繪圖無法顯示中文字體的解決方案
在很長(zhǎng)一段時(shí)間里用Python繪圖,matplotlib都不能很好的顯示中文,下面這篇文章主要給大家介紹了關(guān)于Python利用Matplotlib繪圖無法顯示中文字體的解決方案,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下2022-04-04Python中defaultdict與lambda表達(dá)式用法實(shí)例小結(jié)
這篇文章主要介紹了Python中defaultdict與lambda表達(dá)式用法,結(jié)合實(shí)例形式分析了Python中defaultdict與lambda表達(dá)式的功能、使用方法及相關(guān)注意事項(xiàng),需要的朋友可以參考下2018-04-04python使用dlib進(jìn)行人臉檢測(cè)和關(guān)鍵點(diǎn)的示例
這篇文章主要介紹了python使用dlib進(jìn)行人臉檢測(cè)和關(guān)鍵點(diǎn)的示例,幫助大家更好的理解和使用python,感興趣的朋友可以了解下2020-12-12