日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

button 隐藏属性_PyQt5实现仿QQ贴边隐藏功能!有点意思

發布時間:2023/12/10 编程问答 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 button 隐藏属性_PyQt5实现仿QQ贴边隐藏功能!有点意思 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

此程序大致功能為:可變換顏色,貼邊隱藏。


變換顏色

思路

QPalette( [?p?l?t] 調色板)類相當于對話框或控件的調色板,它管理著控件或窗體的所有顏色信息,每個窗體或控件都包含一個QPalette對象,在顯示時按照它的QPalette對象中對各部分各狀態下的顏色的描述來進行繪制。

實現代碼

def Painting(self): color = random.choice(["CCFFFF","CC6699","CC99FF","99CCFF"]) palette1 = QPalette() palette1.setColor(self.backgroundRole(), QColor("#{}".format(color))) # 改變窗體顏色 self.setPalette(palette1)

貼邊隱藏

思路

可以判斷窗口的位置,當與邊緣的距離小于某值時,再判斷鼠標是否在窗口,判斷是否隱藏窗口;根據隱藏窗口的隱藏位置,獲得某塊區域,當鼠標在這個位置時,顯示窗口。

實現代碼

鼠標進入事件,調用hide_or_show判斷是否該顯示

def enterEvent(self, event): self.hide_or_show('show', event)

鼠標離開事件,調用hide_or_show判斷是否該隱藏

def leaveEvent(self, event): self.hide_or_show('hide', event)

鼠標點擊事件

def mousePressEvent(self, event): if event.button() == Qt.LeftButton: self.dragPosition = event.globalPos() - self.frameGeometry( ).topLeft() QApplication.postEvent(self, QEvent(174)) event.accept()

捕捉鼠標移動事件

def mouseMoveEvent(self, event): if event.buttons() == Qt.LeftButton: try: self.move(event.globalPos() - self.dragPosition) event.accept() except:pass

判斷是否該隱藏

def hide_or_show(self, mode, event): pos = self.frameGeometry().topLeft() if mode == 'show' and self.moved: if pos.x() + WINDOW_WEIGHT >= SCREEN_WEIGHT: # 右側顯示 self.startAnimation(SCREEN_WEIGHT - WINDOW_WEIGHT + 2, pos.y()) event.accept() self.moved = False elif pos.x() <= 0: # 左側顯示 self.startAnimation(0,pos.y()) event.accept() self.moved = False elif pos.y() <= 0: # 頂層顯示 self.startAnimation(pos.x(),0) event.accept() self.moved = False elif mode == 'hide': if pos.x() + WINDOW_WEIGHT >= SCREEN_WEIGHT: # 右側隱藏 self.startAnimation(SCREEN_WEIGHT - 2,pos.y()) event.accept() self.moved = True elif pos.x() <= 2: # 左側隱藏 self.startAnimation(2 - WINDOW_WEIGHT,pos.y()) event.accept() self.moved = True elif pos.y() <= 2: # 頂層隱藏 self.startAnimation(pos.x(),2 - WINDOW_HEIGHT) event.accept() self.moved = True

將劃入劃出作為屬性動畫

def startAnimation(self,width,height): animation = QPropertyAnimation(self,b"geometry",self) startpos = self.geometry() animation.setDuration(200) newpos = QRect(width,height,startpos.width(),startpos.height()) animation.setEndValue(newpos) animation.start()

完整代碼

import sys,randomfrom PyQt5.QtGui import QPalette,QColorfrom PyQt5.QtWidgets import QWidget,QVBoxLayout,QPushButton, QDesktopWidget,QApplicationfrom PyQt5.QtCore import Qt,QRect,QEvent,QPointfrom PyQt5.Qt import QCursor,QPropertyAnimationSCREEN_WEIGHT = 1920SCREEN_HEIGHT = 1080WINDOW_WEIGHT = 300WINDOW_HEIGHT = 600class Ui_Form(QWidget): def __init__(self): self.moved = False super(Ui_Form,self).__init__() self.setupUi() self.resize(WINDOW_WEIGHT, WINDOW_HEIGHT) self.show() def setupUi(self): self.setWindowFlags(Qt.FramelessWindowHint | Qt.WindowStaysOnTopHint | Qt.Tool) # 去掉標題欄 self.widget = QWidget() self.Layout = QVBoxLayout(self.widget) self.Layout.setContentsMargins(0,0,0,0) self.setLayout(self.Layout) self.setWindowFlag(Qt.Tool) self.main_widget = QWidget() self.Layout.addWidget(self.main_widget) self.paint = QPushButton(self.main_widget) self.paint.setText("改變顏色") self.paint.move(QPoint(120,200)) self.paint.clicked.connect(self.Painting) self.exit = QPushButton(self.main_widget) self.exit.setText(" 退出 ") self.exit.move(QPoint(120,400)) self.exit.clicked.connect(lambda:exit(0)) self.setStyleSheet(''' QPushButton { color: rgb(137, 221, 255); background-color: rgb(37, 121, 255); border-style:none; border:1px solid #3f3f3f; padding:5px; min-height:20px; border-radius:15px; } ''') def Painting(self): color = random.choice(["CCFFFF","CC6699","CC99FF","99CCFF"]) palette1 = QPalette() palette1.setColor(self.backgroundRole(), QColor("#{}".format(color))) # 改變窗體顏色 self.setPalette(palette1) def enterEvent(self, event): self.hide_or_show('show', event) def leaveEvent(self, event): self.hide_or_show('hide', event) def mousePressEvent(self, event): if event.button() == Qt.LeftButton: self.dragPosition = event.globalPos() - self.frameGeometry( ).topLeft() QApplication.postEvent(self, QEvent(174)) event.accept() def mouseMoveEvent(self, event): if event.buttons() == Qt.LeftButton: try: self.move(event.globalPos() - self.dragPosition) event.accept() except:pass #def mouseReleaseEvent(self, event): #self.moved = True #self.hide_or_show('show', event) def hide_or_show(self, mode, event): pos = self.frameGeometry().topLeft() if mode == 'show' and self.moved: if pos.x() + WINDOW_WEIGHT >= SCREEN_WEIGHT: # 右側顯示 self.startAnimation(SCREEN_WEIGHT - WINDOW_WEIGHT + 2, pos.y()) event.accept() self.moved = False elif pos.x() <= 0: # 左側顯示 self.startAnimation(0,pos.y()) event.accept() self.moved = False elif pos.y() <= 0: # 頂層顯示 self.startAnimation(pos.x(),0) event.accept() self.moved = False elif mode == 'hide': if pos.x() + WINDOW_WEIGHT >= SCREEN_WEIGHT: # 右側隱藏 self.startAnimation(SCREEN_WEIGHT - 2,pos.y()) event.accept() self.moved = True elif pos.x() <= 2: # 左側隱藏 self.startAnimation(2 - WINDOW_WEIGHT,pos.y()) event.accept() self.moved = True elif pos.y() <= 2: # 頂層隱藏 self.startAnimation(pos.x(),2 - WINDOW_HEIGHT) event.accept() self.moved = True def startAnimation(self,width,height): animation = QPropertyAnimation(self,b"geometry",self) startpos = self.geometry() animation.setDuration(200) newpos = QRect(width,height,startpos.width(),startpos.height()) animation.setEndValue(newpos) animation.start()if __name__ == "__main__": app = QApplication(sys.argv) ui = Ui_Form() sys.exit(app.exec_())

源碼獲取加群哦:1136192749

總結

以上是生活随笔為你收集整理的button 隐藏属性_PyQt5实现仿QQ贴边隐藏功能!有点意思的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。