文章目录
- 控件是否可用
- 控件是否可见
- 编辑状态
- 窗口的激活
- 窗口关闭
- 案例
- 提示信息
- 焦点操作
控件是否可用
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 sysclass 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方法 获取焦点
父控件调用: