描述:
??1.所有可視控制元件的基類
??2.是一個最簡單的空白控制元件
??3.控制元件時用戶界面的最小元素:接收各種事件、繪制在桌面上,展示給用戶看
??4.每個控制元件都是矩形的,它們按Z軸順序排序
??5.控制元件由其父控制元件和前面的控制元件剪切

??6.沒有父控制元件的控制元件,稱之為視窗(如上圖中的window):
??(1).一般會被包裝一個框架
??(2).可以通過某些設定修改
QWidget.__bases__
查看其父類
QWidget.mro()
查看其父類以及父類的父類以及,,,
控制元件的創建

坐標系統

尺寸的相關操作
1.尺寸獲取

2.尺寸設定

3.尺寸限定

限定了尺寸之后,不能再通過resize改變超出范圍的大小
4.內容邊距

滑鼠的相關操作
1.設定滑鼠形狀QWidget.setCursor()


自定義滑鼠:

移動到視窗內,滑鼠就變成了可愛的Madeline

2.重置形狀、獲取滑鼠
點擊查看代碼
window.unsetCursor() # 重置滑鼠物件
print(window.cursor())
current_cursor = window.cursor() # 獲取滑鼠物件
current_cursor.setPos(100, 100) # 設定滑鼠位置
print(current_cursor.pos())
3.滑鼠跟蹤
點擊查看代碼
class MyWindow(QWidget):
def mouseMoveEvent(self, me):
QMouseEvent
print("滑鼠移動了", me.globalPos()) # 相對于螢屏的位置
print("滑鼠移動了", me.localPos()) # 相對于視窗的位置
點擊查看代碼
window.setMouseTracking(True) # 設定滑鼠跟蹤
print(window.hasMouseTracking()) # 檢測滑鼠是否跟蹤

想在類里呼叫類外的控制元件,可以用findChild主動查找
事件訊息
點擊查看代碼
def showEvent(self, QShowEvent): # 展示事件,控制元件顯示時呼叫
print("視窗被展示了")
def closeEvent(self, QCloseEvent): # 關閉事件
print("視窗被關閉了")
def moveEvent(self, QMoveEvent): # 視窗移動事件
print("視窗被移動了")
def resizeEvent(self, QResizeEvent): # 視窗尺寸改變
print("視窗改變了尺寸大小")
def enterEvent(self, QEvent): # 滑鼠進入視窗
print("滑鼠進來了")
self.setStyleSheet("background-color: cyan;")
def leaveEvent(self, QEvent): # 滑鼠離開視窗
print("滑鼠移開了")
self.setStyleSheet("background-color: yellow;")
def mousePressEvent(self, QMouseEvent):
print("滑鼠被按下")
def mouseReleaseEvent(self, QMouseEvent):
print("滑鼠被釋放")
def mouseDoubleClickEvent(self, QMouseEvent):
print("滑鼠雙擊")
def mouseMoveEvent(self, QMouseEvent):
print("滑鼠移動了")
def keyPressEvent(self, QKeyEvent):
print("鍵盤上某一個按鍵被按下")
def keyReleaseEvent(self, QKeyEvent):
print("鍵盤上某一個按鍵被釋放了")
def focusInEvent(self, QFocusEvent): # 失去焦點時使用
print("")
def focusOutEvent(self, QFocusEvent): # 獲取焦點時使用
print("")
def dragEnterEvent(self, QDragEnterEvent): # 拖拽進入控制元件 ,還有leave、move和drop
pass
def paintEvent(self, QPaintEvent): # 繪制事件
pass
def changeEvent(self, QEvent): # 表單改變、字體改變時使用
pass
def contextMenuEvent(self, QContextMenuEvent): # 訪問右鍵選單
pass
事件轉發機制
??空間內對某個事件沒有處理方式,就會轉移到父控制元件

??按鈕本身對點擊事件已經處理過了,所以不會列印一些東西,即不會上傳,而label并沒有對點擊事件的處理,所以會上傳
點擊查看代碼
class Label(QLabel):
def mousePressEvent(self, evt):
print("標簽控制元件被按下")
# evt.accept() # 標識已處理
print(evt.isAccepted()) # 確認是否處理
evt.ignore() # 標識被忽略
案例:
修飾鍵:ctrl、alt等等
普通鍵:abcd123等等
label = QLabel(window)
label.grabKeyboard():
# 使label監聽鍵盤發送的訊息
點擊查看代碼
def keyPressEvent(self, evt):
print("鍵盤上某一個按鍵被按下")
if evt.key() == Qt.Key_Tab:
print("用戶點擊了Tab鍵位")
if evt.modifiers() == Qt.ControlModifier | Qt.ShiftModifier and evt.key() == Qt.Key_S:
print("ctrl+shift+s被點擊了")
父子關系

點擊查看代碼
print(window.childAt(55, 55)) # 檢查該坐標位置的子控制元件,回傳值是對應的控制元件
print(label2.parentWidget()) # 確認指定控制元件的父控制元件
print(window.childrenRect()) # 子控制元件所占位置組成的邊界矩形
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/548571.html
標籤:Python
上一篇:限流的幾種方案
