• GUI编程--PyQt5--QWidget3 控件的交互


    控件是否可用

    obj.setEnabled(True)
    obj.isEnabled()

    控件是否可见

    显示与隐藏
    本质是重新绘制所有的控件,从父控件依次到子控件。
    obj.setVisible(True) 绘制图形 触发了paintEvent
    obj.setVisible(False) 不绘制,重新绘制窗口时,不在绘制当前控件
    类似obj.setHidden(True)
    obj.isVisible() 是否绘制?
    obj.isHidden() 是否隐藏, 由于父控件的不显示而子控件不显示,isHidden()返回False

    以上就是show/hide的底层
    控件状态的改变,就是重新绘制的结果。父控件没展示,子控件绘制出来也不可见

    
    class Window(QWidget):
    	def paintEvent(self, event):
    		print("绘制xxx")
    
    • 1
    • 2
    • 3
    • 4

    obj.isVisibleTo(obj2) 相对于obj2 来说,obj是否可见,即obj2 绘制后,obj是否绘制。

    编辑状态

    # 未编辑状态  不展示*
    window.setWindowTitle("laufing[*]")
    
    # 设置编辑状态
    window.setWindowModified(True)
    window.isWindowModified()
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    窗口的激活

    # 激活
    window.setWindowState(Qt.WindowState.WindowActive)
    # 是否激活
    window.isActiveWindow()
    
    • 1
    • 2
    • 3
    • 4

    窗口关闭

    # 关闭, 不释放对象
    window.close()  # 不绘制,但对象没有删除
    
    # 关闭 并释放对象
    window.setAttribute(Qt.WA_DeleteOnClose, True)
    
    
    # 按钮的信号与槽函数
    self.close_btn.destroyed.connect(lambda : print("close_btn对象释放...", self.close_btn))
    self.close_btn.setAttribute(Qt.WA_DeleteOnClose, True) # 关闭时释放
    self.close_btn.clicked.connect(self.close_btn.close)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    案例

    1. 输入框有内容,则按钮可点击
    2. label内容先 隐藏
    3. 点击登录,若输入内容为“admin”, 则提示“登录成功”, 否则提示"登录失败"
      line_edit.textChanged.connect(change)
      btn.clicked.connect(login)
      在这里插入图片描述
    # __author__ = "laufing"
    # class_based_qt
    # laufing_qt
    
    # __author__ = "laufing"
    
    from PyQt5.QtGui import QIcon, QPixmap, QCursor, QKeyEvent
    from PyQt5 import QtGui
    from PyQt5.QtCore import Qt
    from PyQt5.QtWidgets import QWidget, QApplication, QLabel, QDesktopWidget, QPushButton, QLineEdit
    import sys
    
    
    class Window(QWidget):
        def __init__(self):
            super(Window, self).__init__()
            # 窗口标题
            self.setWindowTitle("laufing[*]")
            # 窗口图标
            pixmap = QPixmap("./imgs/dog.jpg").scaled(50, 50)
            icon = QIcon(pixmap)
            # icon.addPixmap(pixmap, QIcon.Normal, QIcon.Off)
            self.setWindowIcon(icon)
    
            # 设置宽高
            self.resize(500, 600)
    
            # 窗口居中
            desktop_geo = QDesktopWidget().geometry()
            width, height = desktop_geo.width(), desktop_geo.height()
            self.move(width / 2 - self.width() / 2, height / 2 - self.height() / 2)
    
    
            # 展示
            self.set_ui()
    
        def set_ui(self):
            # 设置文本,并隐藏
            self.label = QLabel(self)
            self.label.setText("文本")
            self.label.resize(50, 50)
            self.label.move(50, 50)
            self.label.setVisible(False)  # 不绘制
    
            # 输入框
            self.le = QLineEdit(self)
            self.le.setText("666")
            self.le.move(50, 100)
    
            # 按钮
            self.btn = QPushButton(self)
            self.btn.setText("登录")
            self.btn.move(50, 150)
            self.btn.setEnabled(False)
    
            # 信号与槽
            def change(content):
                self.btn.setEnabled(len(content) > 0)
            def login():
                # 获取输入框的内容
                if self.le.text() == "admin":
                    self.label.setText("登录成功")
                else:
                    self.label.setText("登录失败")
    
                self.label.show()
                self.label.adjustSize()
    
    
            self.le.textChanged.connect(change)
            self.btn.clicked.connect(login)
    
    if __name__ == '__main__':
        import time
        # 窗口应用程序
        app = QApplication(sys.argv)
    
        window = Window()
        window.show()
    
        status_code = app.exec_()
        sys.exit(status_code)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74
    • 75
    • 76
    • 77
    • 78
    • 79
    • 80
    • 81
    • 82

     

    提示信息

    # 组合窗口
    window = QMainWindow() 
    # 使用状态栏(懒加载)
    window.statusBar()
    
    # 状态栏提示信息(鼠标放控件时,提示)
    window.setStatusTip("组合窗口")
    print(window.statusTip())
    
    label = QLabel(window)
    label.setText("测试提示")
    label.setStatusTip("状态栏提示")
    label.setToolTip("悬浮在控件提示")
    label.setToolTipDuration(1000) # 信息提示的时间  毫秒
    
    # 设置窗口的样式
    window.setWindowFlags(Qt.WindowType.WindowContextHelpButtonHint)
    # 点击?  后再点击控件,可以查看帮助信息
    window.setWhatsThis("这是什么?")
    window.show()
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20

    在这里插入图片描述

    焦点操作

    le = QLineEdit(window)
    # le.setFocus()  获取焦点
    le.setFocusPolicy(Qt.FocusPolicy.TabFocus) # tab键获取焦点
    le.setFocusPolicy(Qt.FocusPolicy.ClickFocus) # 点击获取焦点
    le.setFocusPolicy(Qt.FocusPolicy.StrongFocus) # 通过tab & 点击 获取焦点
    le.setFocusPolicy(Qt.FocusPolicy.NoFocus) # 只能通过setFocus方法 获取焦点
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    父控件调用:
    在这里插入图片描述

  • 相关阅读:
    docker原理和基本概念
    Vertica 向 GBase8a 迁移指南之CHAR(N)类型
    浅谈ClickHouse安全性和权限管理
    【计算机毕业设计】基于SpringBoot的电影在线预定与管理系统的设计与实现
    socket编程基础
    算法训练营第四十三天(9.5)| 动态规划Part16:距离
    【SVA】SystemVerilog Assertion语法速查
    微调文本到图像扩散模型新方法DreamBooth,实现主题驱动生成(CVPR 2023)
    Toou-2D windows 打包部署
    c#反射(Reflection)
  • 原文地址:https://blog.csdn.net/weixin_45228198/article/details/127910727