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

  • 相关阅读:
    解决英文版Windows中软件乱码问题
    退出程序时进行确认提醒
    Dreamweaver插件,FireFox插件名称集合
    网页炸弹根本就不算技术
    虚拟格式化硬盘
    当前上下文中不存在名称“Server”的原因
    ASP脚本在Webshell下的安全解决方案
    ASP.NET关于http/1.1 500 Server Error 的解决办法
    在网页文件中插入QQ强制聊天
    删除visual studio最近打开的项目列表
  • 原文地址:https://www.cnblogs.com/yang-2018/p/12880313.html
Copyright © 2011-2022 走看看