控件是否可用
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)
案例
- 输入框有内容,则按钮可点击
- label内容先 隐藏
- 点击登录,若输入内容为“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方法 获取焦点
父控件调用: