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

本文介绍Qt中控件的状态管理方法,包括控件的可用性、可见性、编辑状态等,以及如何处理窗口的激活、关闭等交互事件。同时提供了一个具体的登录案例,展示了控件状态变化对用户体验的影响。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

控件是否可用

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")

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

编辑状态

# 未编辑状态  不展示*
window.setWindowTitle("laufing[*]")

# 设置编辑状态
window.setWindowModified(True)
window.isWindowModified()

窗口的激活

# 激活
window.setWindowState(Qt.WindowState.WindowActive)
# 是否激活
window.isActiveWindow()

窗口关闭

# 关闭, 不释放对象
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. 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)

 

提示信息

# 组合窗口
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()

在这里插入图片描述

焦点操作

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方法 获取焦点

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

laufing

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值