当前位置: 首页 > news >正文

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

文章目录

  • 是否可用
  • 是否显示/隐藏
  • 是否编辑
  • 是否为活跃窗口
  • 关闭
  • 综合案例
  • 信息提示
    • 状态提示
    • 工具提示
    • “这是什么”提示
  • 焦点控制
    • 单个控件角度
    • 父控件角度

是否可用

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

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

以下为代码示例:

from PyQt5.QtWidgets import *
import sysapp = 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_())

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

在这里插入图片描述
在这里插入图片描述

是否显示/隐藏

  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 sysclass 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_())

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

在这里插入图片描述
在这里插入图片描述

是否编辑

设置窗口标题xxx[*]

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

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

代码示例:

from PyQt5.QtWidgets import *
import sysapp = QApplication(sys.argv)window = QWidget()
window.setWindowTitle('[*]交互状态')
window.resize(300, 300)window.setWindowModified(True)  # 设置窗口可编辑状态
print(window.isWindowModified())window.show()
sys.exit(app.exec_())

运行结果:

在这里插入图片描述

是否为活跃窗口

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

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

代码示例:

from PyQt5.QtWidgets import *
import sysapp = 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却不是活跃窗口(标题栏为灰色)。

在这里插入图片描述
在这里插入图片描述

关闭

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

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

代码示例:

from PyQt5.QtWidgets import *
from PyQt5.QtCore import Qt
import sysapp = 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,按钮被隐藏而没有被释放。

在这里插入图片描述
在这里插入图片描述

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

运行结果:

在这里插入图片描述
在这里插入图片描述

综合案例

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

要求:

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

涉及知识点:

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

综合案例的代码:

from PyQt5.QtWidgets import *
import sysclass 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_())

运行结果:

在这里插入图片描述

信息提示

状态提示

  1. statusTip()函数:

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

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

示例代码:

from PyQt5.QtWidgets import *
import sysapp = QApplication(sys.argv)window = QMainWindow()      # 懒加载,用到的时候才会创建
window.setWindowTitle('信息案例')
window.resize(300, 300)window.statusBar()  # 设置状态栏
window.setStatusTip('这是一个窗口')   # 设置状态栏提示信息window.show()sys.exit(app.exec_())

运行结果:

在这里插入图片描述
在以上代码中使用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 sysapp = 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_())

运行结果:

在这里插入图片描述
在这里插入图片描述

“这是什么”提示

  1. whatsThis() 函数:

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

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

示例代码:

from PyQt5.QtWidgets import *
from PyQt5.QtCore import Qt
import sysapp = 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_())

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

在这里插入图片描述
以上代码中使用了 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 sysapp = 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键可切换焦点。

在这里插入图片描述

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

le2.setFocusPolicy(Qt.TabFocus)

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

在这里插入图片描述

父控件角度

  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 sysclass 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_())

运行结果:

在这里插入图片描述
在这里插入图片描述
窗口显示时,焦点为None的原因:初始焦点未明确设置时,窗口显示时焦点会默认为None,也就是执行到window.show()的时候所有子控件都没有获取到焦点,而往后继续执行的过程中,第一个子控件才获取到焦点。

示例2代码:

from PyQt5.QtWidgets import *
import syapp = 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 -控件交互

文章目录 是否可用是否显示/隐藏是否编辑是否为活跃窗口关闭综合案例信息提示状态提示工具提示“这是什么”提示 焦点控制单个控件角度父控件角度 是否可用 setEnabled(bool):该函数用于设置QWidget控件的可用性,参数bool为True表示该控件为可用状态&…...

新版本IntelliJ IDEA(如2023)中运行Spring Boot找不到VM options进行端口的修改的问题解决

问题 如下图找不到VM options。 解决 进行如下操作即可。...

Swift语言配合HTTP写的一个爬虫程序

下段代码使用Embassy库编写一个Swift爬虫程序来爬取jshk的内容。我会使用proxy_host为duoip,proxy_port为8000的爬虫IP服务器。 使用Embassy库编写一个Swift爬虫程序可以实现从网页上抓取数据的功能。下面是一个简单的步骤: 1、首先,需要在X…...

【lvgl】linux开发板搭建环境

前言 本章介绍如何在linux开发板准备好了fb0的情况下移植lvgl。 抓取源码 git clone https://github.com/lvgl/lvgl.git git clone https://github.com/lvgl/lv_drivers.git git clone https://github.com/lvgl/lv_demos.git git clone https://github.com/lvgl/lv_port_lin…...

C之(10)CMocka-单元测试框架使用

CMocka基础使用 Author:Once Day Date:2023年6月15日 参考文档: GoogleTest User’s Guide | GoogleTest嵌入式自动化单元测试(2)-Cmocka - 知乎 (zhihu.com)使用 cmocka 进行单元测试 | 前尘逐梦 (qianchenzhumeng.github.io)cmocka - un…...

如何在idea中使用maven搭建tomcat环境

目录 一、创建maven项目 二、完善代码结构 三、引入依赖和插件 四、启动tomcat,运行项目 (1)点击添加配置 (2)点击左上角的加号,选择maven (3)输入运行命令 五、验证 一、创建…...

单点登录

单点登录(Single Sign-On,简称SSO)是一种可以让用户在多个应用程序和网站中使用同一组登录凭证的技术,即用户只需通过一次身份验证,就可以访问多个应用和网站。以下是单点登录的相关知识点: 1. 身份验证机…...

大数据(十):数据可视化(二)

专栏介绍 结合自身经验和内部资料总结的Python教程,每天3-5章,最短1个月就能全方位的完成Python的学习并进行实战开发,学完了定能成为大佬!加油吧!卷起来! 全部文章请访问专栏:《Python全栈教…...

pytorch+LSTM实现使用单参数预测,以及多参数预测(代码注释版)

开发前准备: 环境管理:Anaconda python: 3.8 显卡:NVIDIA3060 pytorch: 到官网选择conda版本,使用的是CUDA11.8 编译器: PyCharm 简述: 本次使用seaborn库中的flights数据集来做试验,我们通过…...

腾讯云3年/5年特惠云服务器购买入口及攻略

腾讯云是腾讯旗下云计算品牌,为了吸引用户经常推出各种优惠活动,最吸引用户的还是特惠云服务器,下面给大家分享腾讯云3年/5年时长特惠服务器购买入口及教程! 购买入口:传送门>>> 购买攻略: 进入…...

【Linux】jdk Tomcat MySql的安装及Linux后端接口部署

一,jdk安装 1.1 上传安装包到服务器 打开MobaXterm通过Linux地址连接到Linux并登入Linux,再将主机中的配置文件复制到MobaXterm 使用命令查看:ll 1.2 解压对应的安装包 解压jdk 解压命令:tar -xvf jdk 加键盘中Tab键即可…...

天空卫士为集度智能汽车系上“安全带”

10月27日,集度汽车在北京正式发布了旗下首款量产车型——极越 01 SUV。极越 01 SUV 是一款集科技、智能、美学于一身的纯电动中大型SUV,号称全球首款“AI 汽车机器人”。作为集度的合作伙伴,天空卫士第一时间送上祝福,祝愿极越大卖…...

vue el-table-column 修改一整列的背景颜色

目录 修改表头以及一整列数据的背景颜色,效果如下: 总结 修改表头以及一整列数据的背景颜色,效果如下: 修改表头背景颜色:在el-table绑定header-cell-style 修改一整列的数据背景颜色:在el-table绑定:cel…...

docker 安装 minio (单体架构)

文字归档:https://www.yuque.com/u27599042/coding_star/qcsmgom7basm6y64 查询 minio 镜像 docker search minio拉取镜像 docker pull minio/minio创建启动 minio 容器 用户名长度至少为 3,密码长度至少为 8 docker run \ -p 9000:9000 \ -p 9090:909…...

docker搭建kafka

1.拉取zookeeper镜像 注意:云服务器需要设置安全策略放行2181与9092端口,否则访问失败 #默认拉取最新版本镜像 docker pull wurstmeister/zookeeper#检查镜像是否拉取成功 docker images | grep zookeeper2.通过docker运行zookeeper #docker容器单机启…...

给Nginx配置环境变量

给Nginx配置环境变量 Nginx安装目录下的二进制可执行文件nginx的很多命令,要想使用这些命令前提是需要进入sbin目录下才能使用,很不方便,如何去优化,我们可以将该二进制可执行文件加入到系统的环境变量,这样的话在任何…...

CHS零壹视频恢复程序高级版视频修复OCR使用方法

目前CHS零壹视频恢复程序监控版、专业版、高级版已经支持了OCR,OCR是一种光学识别系统,高级版最新版本中不仅仅是在视频恢复中支持OCR,同时视频修复模块也增加了OCR功能,此功能可以针对一些批量修复的视频文件(如执法仪…...

android display 杂谈(三)WMS

用来记录学习wms,后续会一点一点更新。。。。。。 代码:android14 WMS是在SystemServer进程中启动的 在SystemServer中的main方法中,调用run方法。 private void run() { // Initialize native services.初始化服务,加载andro…...

Docker Macvlan网络创建及通信配置

环境说明 4: bond0: <BROADCAST,MULTICAST,MASTER,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000link/ether 7c:83:34:bc:e0:c2 brd ff:ff:ff:ff:ff:ffinet 10.5.1.33/24 brd 10.5.1.255 scope global dynamic bond0宿主机配置 变量配置 eth…...

删除文件要谨慎!如何在Linux中删除目录或文件

删除目录和文件是任何操作系统中最基本但最重要的功能之一。在Linux中,如果运行的是窗口环境,则可以使用文件管理器应用程序查找和删除文件。也许你是通过SSH远程登录的,或者你的Linux计算机没有安装GUI,或者你想对你要删除的内容有更多的控制权。与Linux中的任何东西一样,…...

使用 Docker 部署高可用 MongoDB 分片集群

使用 Docker 部署 MongoDB 集群 Mongodb 集群搭建 mongodb 集群搭建的方式有三种&#xff1a; 主从备份&#xff08;Master - Slave&#xff09;模式&#xff0c;或者叫主从复制模式。副本集&#xff08;Replica Set&#xff09;模式。分片&#xff08;Sharding&#xff09;…...

树莓派安装64位桌面版Ubuntu教程

事实证明不用显示屏没办法连接64位桌面版的22.04Ubuntu&#xff0c;虽然不用显示屏可以安装64位服务器版的22.04Ubuntu.或者虽然有但是我并不知道&#xff0c;我也不想再花时间去知道了&#xff0c;因为我已经花了3天时间了。 步骤&#xff1a; 1&#xff1a;下载64位22.04Ub…...

【sql注入】sql关卡1~4

前言&#xff1a; 靶场自取 level-1 测试注入点 POC: 1,1,1,1"",1/1,1/0 》存在注入点 爆破 POC: id-1andextractvalue(1,concat(0x7e,user(),0x7e))-- level-2 尝试注入点 POC1:admin POC2:admin POC3:adminandsleep(3)-- POC4: adminandif(1,1,0)0-- POC…...

【机器学习合集】模型设计之注意力机制动态网络 ->(个人学习记录笔记)

文章目录 注意力机制1. 注意力机制及其应用1.1 注意力机制的定义1.2 注意力机制的典型应用 2. 注意力模型设计2.1 空间注意力机制2.2 空间注意力模型2.3 通道注意力机制2.4 空间与通道注意力机制2.5 自注意力机制2.5 级联attention 动态网络1. 动态网络的定义2. 基于丢弃策略的…...

【jvm】方法的调用

目录 一、方法的调用二、非虚方法三、虚方法四、虚拟机调用指令4.1 普通调用指令4.2 动态调用指令 五、代码示例5.1 父类5.2 子类5.3 接口5.4 接口实现 六、方法指令七、说明八、invokedynamic指令8.1 说明8.2 代码示例8.3 main方法指令 九、方法重写的本质十、虚方法表 一、方…...

Linux中的进程等待

文章目录 1.进程等待1.1进程等待必要性1.1.1为什么有进程等待这个概念1.1.2进程等待是什么&#xff1f;1.1.3进程等待具体干什么&#xff1f; 1.2进程退出方法&#xff1a; 2.具体代码实现 1.进程等待 1.1进程等待必要性 1.1.1为什么有进程等待这个概念 之前讲过&#xff0c…...

ubuntu22.04桌面完整版配置WiFi方法(修改磁盘文件方式--不需要显示器)(注意了:后来发现这个方法是错误的!!!)

打开这个文件&#xff1a; /etc/network/interfaces 一般来说这个文件是无法修改的&#xff0c;但是可以通过在/etc/network/文件夹找一个叫做interfaces.d的文件夹&#xff0c;(正常的Ubuntu系统跟这个树莓派的Ubuntu系统不一样&#xff0c;正常系统没有这个interfaces文件)…...

React项目使用craco修改webpack配置

React项目使用craco 通过Create React App&#xff08;CRA&#xff09;搭建的react项目&#xff0c;webpack的相关配置是被默认隐藏起来的&#xff0c;如果想修改关于webpack的相关配置&#xff0c;有两种方式&#xff1a; npm run ejectcraco npm run eject npm run eject…...

@RunWith(SpringRunner.class)注解的作用

通俗点&#xff1a; RunWith(SpringRunner.class)的作用表明Test测试类要使用注入的类&#xff0c;比如Autowired注入的类&#xff0c;有了RunWith(SpringRunner.class)这些类才能实例化到spring容器中&#xff0c;自动注入才能生效 官方点&#xff1a; RunWith 注解是JUnit测…...

深入理解网络IO复用并发模型

本文主要介绍服务端对于网络并发模型以及Linux系统下常见的网络IO复用并发模型。文章内容一共分为两个部分。 第一部分主要介绍网络并发中的一些基本概念以及我们Linux下常见的原生IO复用系统调用&#xff08;epoll/select&#xff09;等。第二部分主要介绍并发场景下常见的网…...