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):自定义上下文菜单请求信号

posted @ 2020-05-15 09:13  样子2018  阅读(2885)  评论(0编辑  收藏  举报