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

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)
    GUI编程--PyQt5--QWidget3 控件的交互_第1张图片
# __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()

GUI编程--PyQt5--QWidget3 控件的交互_第2张图片

焦点操作

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

父控件调用:
GUI编程--PyQt5--QWidget3 控件的交互_第3张图片

你可能感兴趣的:(python,GUI,qt,开发语言,pyqt5)