【PyQt学习篇 · ⑨】:QWidget -控件交互

这篇具有很好参考价值的文章主要介绍了【PyQt学习篇 · ⑨】:QWidget -控件交互。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

是否可用

  1. setEnabled(bool):该函数用于设置QWidget控件的可用性,参数bool为True表示该控件为可用状态,False表示该控件为不可用状态。当控件处于不可用状态时,该控件将无法响应用户的交互事件。

  2. isEnabled():该函数用于获取QWidget控件的当前可用状态,返回值为一个bool类型,True表示该控件为可用状态,False 表示该控件为不可用状态。

以下为代码示例:

from PyQt5.QtWidgets import *
import sys

app = QApplication(sys.argv)

window = QWidget()
window.resize(300, 300)
btn = QPushButton(window)
btn.setText('按钮')

# 设置按钮为不可用
btn.setEnabled(False)
print(btn.isEnabled())  # 获取当前按钮是否可用的状态,并打印出来

window.show()

sys.exit(app.exec_())

运行结果:
观察一下打印结果,按钮设置为不可用之后会颜色会变暗,且不能被点击。

【PyQt学习篇 · ⑨】:QWidget -控件交互,PyQt5从入门到精通,pyqt,交互
【PyQt学习篇 · ⑨】:QWidget -控件交互,PyQt5从入门到精通,pyqt,交互

是否显示/隐藏

  1. setVisible(bool)(或setHidden(bool)):这个函数用于设置QWidget控件的可见状态。当参数bool为True时,控件将会显示出来;当参数bool为False时,控件将会隐藏起来。

  2. show():这个函数将会显示QWidget控件。相当于调用setVisible(True)

  3. hide():这个函数将会隐藏QWidget控件。相当于调用setVisible(False)

  4. isHidden():这个函数返回一个bool值,表示当前QWidget控件是否处于隐藏状态。如果返回值为True,表示控件被隐藏;如果返回值为False,表示控件可见。

  5. isVisible():这个函数返回一个bool值,表示当前QWidget控件是否处于可见状态。如果返回值为True,表示控件可见;如果返回值为False,表示控件隐藏。

  6. isVisibleTo(widget):这个函数用于检查QWidget控件是否对另一个特定的widget可见。(父控件显示的时候,子控件是否会跟着显示)它接受一个widget作为参数,返回一个bool值表示控件是否对该widget可见。

注意:

  • visibel:代表控件最终的状态,是否被我们所减(被其他控件遮挡也属于可见)
  • hide:可理解为相对于父控件是否可见

以下为代码示例:

from PyQt5.QtWidgets import *
import sys


class Window(QWidget):
    # 重写绘制事件
    def paintEvent(self, QPaintEvent):
        print('窗口被绘制')
        return super().paintEvent(QPaintEvent)

class Btu(QPushButton):
    # 重写绘制事件
    def paintEvent(self, QPaintEvent):
        print('按钮被绘制')
        return super().paintEvent(QPaintEvent)

if __name__ == '__main__':
    app = QApplication(sys.argv)

    window = Window()
    window.resize(300, 300)

    btu = Btu(window)
    btu.setText('按钮')

    btu.setVisible(False)
    # 打印父控件如果显示的时候,子控件是否跟着被显示
    print(btu.isVisibleTo(window))

    window.show()

    sys.exit(app.exec_())

运行结果:
可以看到按钮已经被隐藏

【PyQt学习篇 · ⑨】:QWidget -控件交互,PyQt5从入门到精通,pyqt,交互
【PyQt学习篇 · ⑨】:QWidget -控件交互,PyQt5从入门到精通,pyqt,交互

是否编辑

设置窗口标题xxx[*]

  1. setWindowModified(bool):这个函数用于设置QWidget控件的编辑状态。当参数bool为True时,控件将会被视为已编辑;当参数bool为False时,控件将不再被视为已编辑。

  2. isWindowModified():这个函数返回一个bool值,表示当前QWidget控件是否处于编辑状态。如果返回值为True,表示控件已经被编辑过;如果返回值为False,表示控件未被编辑。

代码示例:

from PyQt5.QtWidgets import *
import sys

app = QApplication(sys.argv)

window = QWidget()
window.setWindowTitle('[*]交互状态')
window.resize(300, 300)

window.setWindowModified(True)  # 设置窗口可编辑状态
print(window.isWindowModified())

window.show()
sys.exit(app.exec_())

运行结果:

【PyQt学习篇 · ⑨】:QWidget -控件交互,PyQt5从入门到精通,pyqt,交互

是否为活跃窗口

活跃窗口是用户当前正在与之交互的窗口,例如正在编辑文本、接收键盘输入或执行操作。

isActiveWindow(): 这个函数用于检查QWidget控件是否为活跃窗口。如果控件是当前应用程序激活的窗口,即接收键盘和鼠标事件的窗口,则函数返回True;否则返回False。

代码示例:

from PyQt5.QtWidgets import *
import sys

app = QApplication(sys.argv)

w1 = QWidget()
w1.resize(300, 300)
w1.setWindowTitle('w1')

w2 = QWidget()
w2.resize(400, 200)
w2.setWindowTitle('w2')

w1.show()
w2.show()

w1.raise_()     # 将w1窗口设为顶层窗口

print(w1.isActiveWindow())      # 打印w1是否为活跃窗口
print(w2.isActiveWindow())      # 打印w2是否为活跃窗口

sys.exit(app.exec_())

运行结果:
从下图中我们看到,即使使用了raise_()将w1窗口设置为顶层窗口,但是w1却不是活跃窗口(标题栏为灰色)。

【PyQt学习篇 · ⑨】:QWidget -控件交互,PyQt5从入门到精通,pyqt,交互
【PyQt学习篇 · ⑨】:QWidget -控件交互,PyQt5从入门到精通,pyqt,交互

关闭

  1. close():这个函数用于关闭QWidget控件,使其不可见。调用该函数时会触发 closeEvent() 函数,您可以在该函数中执行额外的操作,例如先隐藏控件,等待异步操作完成后再关闭。

  2. setAttribute(Qt.WA_DeleteOnClose, True):这个函数就是告诉 PyQt 在控件关闭后将其删除。由于控件在关闭时不会自动删除,因此需要在退出函数closeEvent()中调用 deleteLater() 函数或手动删除控件。

代码示例:

from PyQt5.QtWidgets import *
from PyQt5.QtCore import Qt
import sys

app = QApplication(sys.argv)

window = QWidget()
window.resize(300, 300)

btn = QPushButton(window)
btn.setText('按钮')

btn.destroyed.connect(lambda: print('按钮被销毁'))   # 绑定销毁事件,若按钮被销毁则打印“按钮被销毁”

#### 测试代码区 ####

#### 测试代码区 ####

window.show()
sys.exit(app.exec_())

下面将再测试代码区中编写测试API的代码:

btn.close()
print(btn.isHidden())

运行结果:
按钮已被隐藏,控制台输出True,按钮被隐藏而没有被释放。

【PyQt学习篇 · ⑨】:QWidget -控件交互,PyQt5从入门到精通,pyqt,交互
【PyQt学习篇 · ⑨】:QWidget -控件交互,PyQt5从入门到精通,pyqt,交互

btn.setAttribute(Qt.WA_DeleteOnClose, True)
btn.close()

运行结果:

【PyQt学习篇 · ⑨】:QWidget -控件交互,PyQt5从入门到精通,pyqt,交互
【PyQt学习篇 · ⑨】:QWidget -控件交互,PyQt5从入门到精通,pyqt,交互

综合案例

案例:创建一个窗口,包含一个文本框和一个按钮以及一个标签。

要求:

  • 默认状态:标签隐藏;文本框和按钮显示;按钮设置为不可用状态。
  • 当文本框有内容时,标签显示登录,让按钮可用,否则不可用。
  • 当文本框内容为PyQt5时,点击按钮则显示标签,并展示文本为登录成功,否则为失败。

涉及知识点:

  • 文本框的创建:QLineEdit
  • 文本框监测内容变更:textChanged信号
  • 文本框内容的获取:text()方法
  • 按钮状态的设置

综合案例的代码:

from PyQt5.QtWidgets import *
import sys


class Window(QWidget):
    def __init__(self, parent=None):
        super().__init__(parent)

        self.setWindowTitle("综合案例")
        self.resize(300, 300)

        self.setup_ui()

    def setup_ui(self):
        self.label = QLabel(self)
        self.label.setStyleSheet('background-color: cyan;')
        self.label.move(100, 50)
        self.label.hide()

        self.lineEdit = QLineEdit(self)
        self.lineEdit.move(100, 100)
        self.lineEdit.textChanged.connect(self._textChanged)    # 文本框文本改变事件绑定

        self.btu = QPushButton(self)
        self.btu.setText('按钮')
        self.btu.move(100, 150)
        self.btu.setEnabled(False)
        self.btu.pressed.connect(self._btuPressed)

    def _textChanged(self):
        self.label.show()
        self.label.setText('登录')
        self.label.adjustSize()
        if len(self.lineEdit.text()) > 0:
            self.btu.setEnabled(True)
        else:
            self.label.hide()

    def _btuPressed(self):
        self.label.show()
        if self.lineEdit.text() == 'PyQt5':
            self.label.setText('登录成功')
        else:
            self.label.setText('登录失败')

        self.label.adjustSize()     # 将标签设置为自适应


if __name__ == '__main__':
    app = QApplication(sys.argv)

    window = Window()
    window.show()

    sys.exit(app.exec_())

运行结果:

【PyQt学习篇 · ⑨】:QWidget -控件交互,PyQt5从入门到精通,pyqt,交互

信息提示

状态提示

  1. statusTip()函数:

    • 它用于获取控件的状态提示信息,返回一个字符串。
    • 示例:tooltip = button.statusTip()
  2. setStatusTip(str)函数:

    • 它用于设置控件的状态栏提示信息。
    • 示例:button.setStatusTip('Press this button to do something cool!')

示例代码:

from PyQt5.QtWidgets import *
import sys


app = QApplication(sys.argv)

window = QMainWindow()      # 懒加载,用到的时候才会创建
window.setWindowTitle('信息案例')
window.resize(300, 300)

window.statusBar()  # 设置状态栏
window.setStatusTip('这是一个窗口')   # 设置状态栏提示信息

window.show()

sys.exit(app.exec_())

运行结果:

【PyQt学习篇 · ⑨】:QWidget -控件交互,PyQt5从入门到精通,pyqt,交互
在以上代码中使用QMainWindow()是因为它是PyQt中提供的一个主窗口类,适用于创建带有菜单栏、工具栏、状态栏和中央部件的应用程序窗口。

工具提示

  1. toolTip() 函数:

    • 它用于获取控件的工具提示信息,返回一个字符串。
    • 示例:tooltip = button.toolTip()
  2. setToolTip(str) 函数:

    • 它用于设置控件的工具提示信息。
    • 示例:button.setToolTip('This is a button')

工具提示持续时间:

  • 工具提示可以设置它们在屏幕上显示的持续时间。
  • 默认情况下,工具提示将持续一段时间后自动消失。
  1. toolTipDuration() 函数:

    • 它用于获取工具提示的持续时间,以毫秒为单位。
    • 示例:duration = QToolTip.toolTipDuration()
  2. setToolTipDuration(msec) 函数:

    • 它用于设置工具提示的持续时间,以毫秒为单位。
    • 示例:QToolTip.setToolTipDuration(5000)

示例代码:

from PyQt5.QtWidgets import *
import sys


app = QApplication(sys.argv)

window = QMainWindow()
window.setWindowTitle('信息案例')
window.resize(300, 300)

label = QLabel(window)
label.setText('标签')

label.setToolTip('这是一个标签')  # 设置标签工具提示信息
print(label.toolTip())  # 打印工具提示信息

label.setToolTipDuration(2000)  # 设置标签工具提示信息为2秒
print(label.toolTipDuration())  # 打印工具提示信息的时间

window.show()
sys.exit(app.exec_())

运行结果:

【PyQt学习篇 · ⑨】:QWidget -控件交互,PyQt5从入门到精通,pyqt,交互
【PyQt学习篇 · ⑨】:QWidget -控件交互,PyQt5从入门到精通,pyqt,交互

“这是什么”提示

  1. whatsThis() 函数:

    • 它用于获取控件的“这是什么”提示信息,返回一个字符串。
    • 示例:wts = button.whatsThis()
  2. setWhatsThis(str) 函数:

    • 它用于设置控件的“这是什么”提示信息。
    • 示例:button.setWhatsThis('This is a button')

示例代码:

from PyQt5.QtWidgets import *
from PyQt5.QtCore import Qt
import sys


app = QApplication(sys.argv)

window = QMainWindow()
window.setWindowTitle('信息案例')
window.resize(300, 300)

window.setWindowFlags(Qt.WindowContextHelpButtonHint)

label = QLabel(window)
label.setText('标签')
label.adjustSize()

label.setWhatsThis('这是什么标签')
print(label.whatsThis())    # 打印“这是什么”提示信息

window.show()
sys.exit(app.exec_())

运行结果:
点击窗口标题栏中的“?”,将鼠标移动到标签并点击,点击后即出现“这是什么”提示信息。

【PyQt学习篇 · ⑨】:QWidget -控件交互,PyQt5从入门到精通,pyqt,交互
以上代码中使用了 window.setWindowFlags(Qt.WindowContextHelpButtonHint) 这行代码来设置窗口标志,其作用是在窗口的标题栏右侧添加一个帮助按钮,也就是包含一个问号图标并显示"What’s This"文本的帮助按钮,用于提供更多的上下文相关帮助信息。

焦点控制

在 PyQt 中,焦点控制是指应用程序中各个控件接收焦点的方式和顺序。焦点控制允许用户使用键盘或鼠标与特定控件进行交互。下面是一些在 PyQt 中实现焦点控制的方法和技术。

单个控件角度

  1. setFocus() 函数:

    • 它用于将焦点设置到特定控件上,使该控件成为接收键盘输入的目标。
    • 示例:widget.setFocus()
  2. setFocusPolicy(Policy) 函数:

    • 它用于设置控件的焦点策略,即定义用户如何通过键盘或鼠标与控件交互。
    • 可选的焦点策略包括:
      • Qt.TabFocus:通过 Tab 键进行切换焦点。
      • Qt.ClickFocus:通过点击鼠标进行设置焦点。
      • Qt.StrongFocus:允许通过 Tab 键和点击鼠标进行焦点设置。
      • Qt.NoFocus:控件不接收焦点。
    • 示例:widget.setFocusPolicy(Qt.TabFocus)
  3. clearFocus() 函数:

    • 它用于清除控件上的焦点,使控件不再处于焦点状态。
    • 示例:widget.clearFocus()

示例代码:

from PyQt5.QtWidgets import *
from PyQt5.QtCore import Qt
import sys


app = QApplication(sys.argv)

window = QWidget()
window.setWindowTitle('焦点控制')
window.resize(300, 300)

le1 = QLineEdit(window)
le1.move(50, 50)

le2 = QLineEdit(window)
le2.move(50, 100)

le3 = QLineEdit(window)
le3.move(50, 150)

window.show()
sys.exit(app.exec_())

运行结果:
以上代码没有设置获取焦点的策略,默认情况下运行程序,第一个文本框会获得焦点,且按下Tab键可切换焦点。

【PyQt学习篇 · ⑨】:QWidget -控件交互,PyQt5从入门到精通,pyqt,交互

在以上代码的基础上设置le2获取焦点的策略为通过Tab键获取焦点:

le2.setFocusPolicy(Qt.TabFocus)

运行结果:
鼠标点击le2并不能获取到焦点,而点击le3可获取到焦点,只有通过Tab键才能让le2获取焦点。

【PyQt学习篇 · ⑨】:QWidget -控件交互,PyQt5从入门到精通,pyqt,交互

父控件角度

  1. focusWidget() 函数:

    • 使用此函数可以查找当前具有焦点的子控件。
    • 示例:parent.focusWidget()
  2. focusNextChild() 函数:

    • 使用此函数可以将焦点从当前具有焦点的子控件移动到下一个子控件。
    • 示例:parent.focusNextChild()
  3. focusPreviousChild() 函数:

    • 使用此函数可以将焦点从当前具有焦点的子控件移动到上一个子控件。
    • 示例:parent.focusPreviousChild()
  4. focusNextPrevChild(bool) 函数:

    • 使用此函数可以根据当前具有焦点的子控件,将焦点移动到下一个或上一个子控件。
    • 当参数为 true 时,向下查找下一个子控件;当参数为 false 时,向上查找上一个子控件。
    • 示例:parent.focusNextPrevChild(True)
  5. setTabOrder(pre_widget, next_widget) 函数:

    • 使用此函数可以设置两个控件之间的 Tab 键顺序,按下 Tab 键时焦点会从第一个控件切换到第二个控件。
    • 示例:QWidget.setTabOrder(widget1, widget2)

示例1代码

from PyQt5.QtWidgets import *
import sys

class Window(QWidget):
    def mousePressEvent(self, QPressEvent):
        print('获取焦点的控件:', self.focusWidget())

if __name__ == '__main__':
    app = QApplication(sys.argv)

    window = Window()
    window.resize(300, 300)

    le1 = QLineEdit(window)
    le1.move(50, 0)
    print('le1对象:', le1)

    le2 = QLineEdit(window)
    le2.move(50, 50)

    le3 = QLineEdit(window)
    le3.move(50, 100)

    window.show()
    # 获取当前窗口内部,所有子控件当中获取焦点的那个控件
    print(window.focusWidget())
    sys.exit(app.exec_())

运行结果:

【PyQt学习篇 · ⑨】:QWidget -控件交互,PyQt5从入门到精通,pyqt,交互
【PyQt学习篇 · ⑨】:QWidget -控件交互,PyQt5从入门到精通,pyqt,交互
窗口显示时,焦点为None的原因:初始焦点未明确设置时,窗口显示时焦点会默认为None,也就是执行到window.show()的时候所有子控件都没有获取到焦点,而往后继续执行的过程中,第一个子控件才获取到焦点。

示例2代码:

from PyQt5.QtWidgets import *
import sy

app = QApplication(sys.argv)

window = QWidget()
window.resize(300, 300)

le1 = QLineEdit(window)
le1.move(50, 0)

le2 = QLineEdit(window)
le2.move(50, 50)

le3 = QLineEdit(window)
le3.move(50, 100)

# 设置获取焦点规则
window.setTabOrder(le1, le3)
window.setTabOrder(le3, le2)

window.show()

sys.exit(app.exec_())

运行结果:

【PyQt学习篇 · ⑨】:QWidget -控件交互,PyQt5从入门到精通,pyqt,交互文章来源地址https://www.toymoban.com/news/detail-742605.html

到了这里,关于【PyQt学习篇 · ⑨】:QWidget -控件交互的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • PyQt5之滑块及滑动条控件

    在Input Widgets分组中,QSlider和QScrollBar是两个滑动型输入组件 QSlider和ScrollBar都是从QAbstractSlider类继承来的,拥有一些相同的属性,通过属性编辑器可以查看效果。 属性 含义 minimum、maximum 输入范围的最小值和最大值 singleStep 单步长,拖动标尺上的滑块,或按下左、右键时的最

    2024年02月11日
    浏览(448)
  • 【PyQt学习篇 · ⑥】:QWidget - 事件

    showEvent(QShowEvent) 方法: showEvent() 方法在窗口即将显示时被调用。 它的参数 QShowEvent 可以提供一些有关显示事件的信息。 可以通过重写 showEvent() 方法来执行一些在窗口显示前需要初始化的操作。 closeEvent(QCloseEvent) 方法: closeEvent() 方法在窗口即将关闭时被调用。 它的参数

    2024年02月06日
    浏览(44)
  • python pyqt5部分控件操作,包括弹窗等

    import sys, fitz from reportlab.lib.pagesizes import portrait from reportlab.pdfgen import canvas from PIL import Image as ima import os #import jm from pypinyin import lazy_pinyin import traceback, base64 from PyQt5.QtWidgets import QMessageBox import sys, traceback from PyQt5.QtWidgets import QApplication, QMainWindow, QFileDialog, QAction from PyQt5 impor

    2023年04月21日
    浏览(36)
  • 【PyQt学习篇 · ⑤】:QWidget - 鼠标操作

    在PyQt中,QWidget类提供了设置鼠标形状的功能。可以使用 setCursor() 方法来更改QWidget及其子类的鼠标形状。该方法接受一个Qt.CursorShape参数,该参数定义了不同的鼠标形状选项。 以下是一些常用的鼠标形状选项及其对应的Qt.CursorShape常量: Qt.ArrowCursor:标准箭头指针。 Qt.UpArr

    2024年02月08日
    浏览(43)
  • ChatGPT解答:PYQT5 美化各种控件的方案和实例

    ChatGPT解答:PYQT5 美化各种控件的方案和实例 修改按钮样式 修改标签样式 修改文本框样式 修改窗口样式 修改表格样式 修改下拉框样式 修改进度条样式 修改复选框样式 修改滑动条样式 修改菜单栏样式 以上是一些常见控件的美化方案和实例,可以根据自己的需求进行修改和

    2023年04月25日
    浏览(89)
  • PyQt5常用控件大全(详尽方法 + 实例操作,持续更新中…)

    1.1 简介         标签控件主要用于显示用户不能编辑的文本,标识窗体上的对象(例如:给文本框、列表框添加,描述信息等)。它对应PyQt5中的QLabel类,Label控件在本质上是QLabel类的一个对象。         在Qt Designer设计器中,它的图标如下图所示: 1.2 设置标签文本

    2024年02月02日
    浏览(55)
  • 实习记录(5)——PyQT5界面设计及交互

    首先按照甲方PPT上给的界面做了,在写内部逻辑的时候发现有不少问题,没考虑到使用者的感受,甚至我觉得根本用不了。于是我和小哥讨论了一下之后,我按照我的想法做了一个新的页面出来,能实现需求的同时,让使用的人体验更好也更直观。 昨天安装成功了PyQT5,今天

    2023年04月24日
    浏览(40)
  • 基于PyQt5的UI界面开发——对基本控件的介绍

    在PyQt中,控件是用户界面上的可见元素。控件可以包括按钮、标签、文本框、进度条等。每个控件都有自己的属性和方法,可以通过编程方式进行调整和操作。 以下是一些常用的PyQt控件: QLabel(标签):用于显示文本或图片的静态控件。 QPushButton(按钮):用于触发特定动

    2024年02月16日
    浏览(37)
  • PyQt5桌面应用开发(16):定制化控件-QPainter绘图

    PyQt5桌面应用开发(1):需求分析 PyQt5桌面应用开发(2):事件循环 PyQt5桌面应用开发(3):并行设计 PyQt5桌面应用开发(4):界面设计 PyQt5桌面应用开发(5):对话框 PyQt5桌面应用开发(6):文件对话框 PyQt5桌面应用开发(7):文本编辑+语法高亮与行号 PyQt5桌面应用开

    2024年02月06日
    浏览(57)
  • PyQt5入门(一)——PyQt5与QtDesigner的安装

    首先,需要确保你已经安装了Python和PIP,因为使用PIP来安装PyQt5是最简便的方法。以下是在Windows和Ubuntu环境下配置并安装PyQt5以及QtDesigner的步骤: 打开命令提示符(CMD)。 运行以下命令安装PyQt5:pip install pyqt5 安装完成后,在命令提示符中运行“python”命令,然后输入“im

    2024年02月02日
    浏览(52)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包