zoukankan      html  css  js  c++  java
  • 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):自定义上下文菜单请求信号

  • 相关阅读:
    How to convert VirtualBox vdi to KVM qcow2
    (OK)(OK) adb -s emulator-5554 shell
    (OK)(OK) using adb with a NAT'ed VM
    (OK) How to access a NAT guest from host with VirtualBox
    (OK) Creating manually one VMs from an existing VDI file in CLI (VBoxManage) in Fedora 23
    (OK)(OK) Creating VMs from an existing VDI file in CLI (VBoxManage) in Fedora 23
    (OK) Creating_VMs_from_an_existing_VDI_file.txt
    (OK) Creating VMs from an existing VDI file —— in OS X
    (OK) install_IBM_SERVER.txt
    (OK) install chrome & busybox in android-x86_64 —— uninstall chrome
  • 原文地址:https://www.cnblogs.com/yang-2018/p/12880313.html
Copyright © 2011-2022 走看看