PyQt5 之Qwidget控件


一、常用API

1、大小與位置:
  x():相對於父控件的位置,頂層控件(沒有父控件)則相對於桌面的x位置
  y():相對於父控件的y位置,頂層控件(沒有父控件)則相對於桌面的y位置
  pos():x和y的組合 QPoint(x, y)
  width():控件的寬度,不包含任何窗口框架
  height():控件的高度,不包含任何窗口框架
  size():width和height的組合 ,QSize(width, height)
  geometry():用戶區域相對於父控件的位置和尺寸組合 QRect(x, y, width, height)
  rect():0, 0, width, height的組合 QRect(0, 0, width, height)
  frameSize():框架大小
  frameGeometry():框架尺寸
  move(x, y):操控的是x, y;也就是pos 包括窗口框架
  resize(width, height):操控的是寬高 不包括窗口框架
  setGeometry(x_noFrame, y_noFrame, width, height):
  adjustSize():根據內容自適應大小
  setFixedSize():設置固定尺寸


2、最大和最小尺寸:
  minimumWidth():最小尺寸的寬度
  minimumHeight():最小尺寸的高度
  minimumSize():最小尺寸
  maximumWidth():最大尺寸的寬度
  maximumHeight():最大尺寸的高度
  maximumSize():最大尺寸
  setMaximumWidth():
  setMaximumHeight():
  setMinimumWidth():
  setMinimumHeight():
  setMinimumSize()


3、設置內容邊距:
  setContentsMargins(左, 上, 右, 下)
  getContentsMargins():獲取內容邊距
  contentsRect():獲取內容區域


4、鼠標相關:
  setCursor():設置鼠標形狀
  unsetCursor():重置鼠標
  cursor() -> QCursor:獲取鼠標
  hasMouseTracking():判定是否設置了鼠標跟蹤
  setMouseTracking(bool):設置鼠標是否跟蹤 。所謂的鼠標跟蹤,其實就是設置檢測鼠標移動事件的條件


5、事件相關:
  showEvent(QShowEvent):控件顯示時調用
  closeEvent(QCloseEvent):控件關閉時調用
  moveEvent(QMoveEvent):控件移動時調用
  resizeEvent(QResizeEvent):控件調整大小時調用
  enterEvent(QEvent):鼠標進入時觸發
  leaveEvent(QEvent):鼠標離開時觸發
  mousePressEvent(QMouseEvent):
  mouseReleaseEvent(QMouseEvent):
  mouseDoubleClickEvent(QMouseEvent)
  mouseMoveEvent(QMouseEvent):鼠標按下后移動時觸發
  keyPressEvent(QKeyEvent):鍵盤按下時調用
  keyReleaseEvent(QKeyEvent):
  focusInEvent(QFocusEvent):獲取焦點時調用
  focusOutEvent(QFocusEvent):失去焦點時調用
  dragEnterEvent(QDragEnterEvent):拖拽進入控件時調用
  dragLeaveEvent(QDragLeaveEvent):拖拽離開控件時調用
  dragMoveEvent(QDragMoveEvent):拖拽在控件內移動時調用
  dropEvent(QDropEvent):拖拽放下時調用
  paintEvent(QPaintEvent):顯示控件, 更新控件時調用
  changeEvent(QEvent):窗體改變, 字體改變時調用
  contextMenuEvent(QContextMenuEvent):訪問右鍵菜單時調用
  inputMethodEvent(QInputMethodEvent):輸入法調用


6、父子關系:
  childAt(x, y):獲取在指定坐標的控件。(根據當前點擊的坐標獲取子控件)
  parentWidget():獲取指定控件的父控件
  childrenRect():所有子控件組成的邊界矩形

from PyQt5.Qt import *
import sys

class Window(QWidget):
    def mousePressEvent(self, evt):
        click_x = evt.x()
        click_y = evt.y()
        # 根據當前點擊的坐標獲取子控件
        child = self.childAt(click_x, click_y)
        if child is not None:
            child.setStyleSheet('background-color: green')

if __name__ == '__main__':
    app = QApplication(sys.argv)
    window = Window()
    window.setWindowTitle('QWidget')
    window.resize(500, 400)
    
    label1 = QLabel(window)
    label1.setText('label1')
    
    label2 = QLabel(window)
    label2.setText('label2')
    label2.move(100, 100)
    
    window.show()
    sys.exit(app.exec_())

 

7、層級控制:注意:以下操作專指同級控件
  lower():將控件降低到最底層
  raise下划線():將控件提升到最上層
  a.stackUnder(b):讓a放在b下面

from PyQt5.Qt import *
import sys

class Label(QLabel):
    def mousePressEvent(self, evt):
        # 將控件提升到最上層
        self.raise_()

if __name__ == '__main__':
    app = QApplication(sys.argv)
    window = QWidget()
    window.setWindowTitle('層級關系調整')
    window.resize(500, 500)
    
    label1 = Label(window)
    label1.setText('QLabel1')
    label1.resize(200, 200)
    label1.setStyleSheet('background-color: red')
    
    label2 = Label(window)
    label2.setText('QLabel2')
    label2.resize(200, 200)
    label2.setStyleSheet('background-color: green')
    label2.move(100, 100)
    
    window.show()
    sys.exit(app.exec_())


8、頂層窗口相關:
  setWindowIcon(QIcon("resource/header_icon.png")):
  windowIcon():
  setWindowTitle("社會我順哥"):
  windowTitle():
  setWindowOpacity(float):不透明度
  windowOpacity():
  setWindowState(state):設置窗口的狀態
  showFullScreen():
  showMaximized():
  showNormal():正常
  isMinimized():是否是最小化窗口
  isMaximized():是否是最大化窗口
  isFullScreen():是否全屏
  window.setWindowFlags(Qt.WindowStaysOnTopHint):窗口樣式

from PyQt5.Qt import *
import sys

class Window(QWidget):
    def __init__(self):
        super().__init__()
        
    def mousePressEvent(self, evt):
        # 判斷窗口是否最大化
        if self.isMaximized():
            # 設置最小化
            self.showNormal()
        else:
            # 設置最大化
            self.showMaximized()

if __name__ == '__main__':
    app = QApplication(sys.argv)
    window = Window()
    window.setWindowTitle('QWidget-窗口相關的操作')
    window.show()
    sys.exit(app.exec_())


9、交互狀態:
  setEnabled(bool):設置控件是否禁用
  isEnabled():獲取控件是否可用
  setVisible(bool):
  isHidden():
  isVisible():
  isVisibleTo(widget):
  setWindowModified(bool):是否編輯
  isWindowModified():
  isActiveWindow():是否為活躍窗口
  close():

from PyQt5.Qt import *
import sys

class Window(QWidget):
    def __init__(self):
        super().__init__()
        self.setWindowTitle('QWidget-交互狀態')
        self.setGeometry(0,0, 500, 400)
        self.setup_ui()
    
    def setup_ui(self):
        edit = QLineEdit(self)
        btn = QPushButton(self)
        btn.setText('按鈕')
        btn.setDisabled(True)
        btn.move(0,100)
        def change(text):
            btn.setDisabled((not len(text) > 0))
        edit.textChanged.connect(change)

if __name__ == '__main__':
    app = QApplication(sys.argv)
    window = Window()
    window.show()
    sys.exit(app.exec_())

 

10、信息提示:
  statusTip():狀態提示
  setStatusTip(str):
  toolTip():工具提示
  setToolTip(str):
  setWhatsThis(str):這是啥提示
  whatsThis():


11、焦點控制:
  setFocus():指定控件獲取焦點
  setFocusPolicy(Policy):設置焦點獲取策略
  Qt.TabFocus:通過Tab鍵獲得焦點
  Qt.ClickFocus:通過被單擊獲得焦點
  Qt.StrongFocus:可通過上面兩種方式獲得焦點
  Qt.NoFocus:不能通過上兩種方式獲得焦點(默認值),setFocus仍可使其獲得焦點
  clearFocus():取消焦點


12、不太重要的方法:
  setAttribute(Qt :: WidgetAttribute 屬性,bool on = true):屬性
  QWidget :: mask()const:遮罩 返回當前在小部件上設置的遮罩。如果沒有設置掩碼,返回值將是一個空白區域。


13、信號:
  windowTitleChanged(QString):窗口標題改變信號
  windowIconChanged(QIcon):窗口圖標改變信號
  customContextMenuRequested(QPoint):自定義上下文菜單請求信號


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM