07. 按钮控件

news/2024/12/19 23:29:54/文章来源:https://www.cnblogs.com/FlurryHeart/p/18618118

一、按钮控件

  PySide6 中按钮分为 push 按钮(按压型)、check 按钮(勾选型)和 toggle 按钮(切换型,多个按钮中只有一个可以选中)。其中,push 按钮有 QPushButton 按钮和 QToolButton 按钮,check 按钮是 QCheckBox 按钮,toggle 按钮是 QRadioButton,它们都继承自 QAbastractButton,除此之外还有个从 QPushButton 继承而来的 QCommandLinkButton 按钮。

  我们可以在终端中使用 pip 安装 pyside6 模块。

pip install pyside6

按钮控件继承图

二、抽象按钮

  抽象按钮 QAbstractButton 是所有按钮控件的基类,不能直接使用,它为其他按钮提供一些共同的属性和信号。QAbstractButton 为按钮类提共一些共同的属性和方法。

# 实例方法
setText(text:str) -> None                                                       # 设置文本
text() -> str                                                                   # 获取文本
setIcon(icon:Union[QIcon, QPixmap]) -> None                                     # 设置图标
icon() -> QIcon                                                                 # 获取图标
iconSize() -> QSize                                                             # 获取图标大小
setCheckable(arg__1:bool) -> None                                               # 设置是否可选中
isCheckable() -> bool                                                           # 获取是否可选中
isChecked() -> bool                                                             # 获取是否被选中
setAutoRepeat(arg__1:bool) -> None                                              # 设置是否具有自动重复性
autoRepeat() -> bool                                                            # 获取是否具有自动重复性
setAutoRepeatDelay(arg__1:int) -> None                                          # 设置重复执行的延迟时间
autoRepeatDelay() -> int                                                        # 获取重复执行的延迟时间
setAutoRepeatInterval(arg__1:int) -> None                                       # 设置重复发送信号的时间间隔
autoRepeatInterval() -> int                                                     # 获取重复执行的时间间隔
setAutoExclusive(arg__1:bool) -> None                                           # 设置自动互斥状态,即按钮是否只能被单击一次
autoExclusive() -> bool                                                         # 获取是否具有互斥性
setShortcut(key:Union[QKeySequence, QKeySequence.StandardKey ,str]) -> None     # 设置快捷键
shortcut() -> QKeySequence                                                      # 获取快捷键
setDown(arg__1:bool) -> None                                                    # 设置按钮是否按下,若设置为True,则不会发送pressed()或clicked()信号
hitButton(pos:QPoint) -> bool                                                   # 如果pos点在按钮内部,则返回True# 槽方法
setIconSize(size:QSize) -> None                                                 # 设置图标大小
setChecked(arg__1:bool) -> None                                                 # 设置是否被选中
animateClick() -> None                                                          # 用代码执行一次按钮被按下动作,发送相应的信号
click() -> None                                                                 # 用代码执行一次按钮被单击动作,发送相应的信号。如果按钮可以勾选,则勾选状态发生改变
toggle() -> None                                                                # 用代码切换按钮的勾选状态

  按钮都有 setText(str)setIcon(QIcon) 方法,分别 设置按钮上的文字和图标;用 text()icon() 方法 获取按钮的文字和图标;用 setIconSize(QSize) 方法 设置图标的尺寸

  按钮文字中若有 “&”,则 “&” 后的字母是快捷键,在界面运行时按 Alt+ 字母键会发送按钮的信号,如果要在按钮中显示 “&” 方法,则需要用两个 “&&” 表示一个 “&”。

  对于没有文字的按钮,用 setShortcut(str)setShortcut(QKeySequence) 方法 设置快捷键,其中 QKeySequence 是用于 定义快捷键的类,例如用 setShortcut("Ctrl+O") 或 setShortcut(QKeySequence("Ctrl+O")) 表示的快捷键是键盘的 Ctrl 键和 O 键的组合。

  快捷键也可以是枚举常量 Qt.Modifier 和常量 Qt.Key 的组合,Qt.Modifier 可取 Qt.SHIFTQt.METAQt.CTRLQt.ALTQt.Key 可取 Qt.Key_A ~ Qt.Key_ZQt.Key_0 ~ Qt.Key_9 等,例如 setShortcut(QKeySequence(Qt.CTRL|Qt.ALT|Qt.Key_O)) 表示的快捷键是键盘的 Ctrl 键、Alt 键和 O 键的组合。

  也可以使用 QKeySequence 中的标准快捷键枚举常量 QKeySequence.StandardKey 来定义,例如 QKeySequence.Open、QKeySequence.Close、QKeySequence.Cut、QKeySequence.Copy、QKeySequence.Paste、QKeySequence.Print 和 QKeySequence.Find 表示的快捷键分别是 Ctrl+O、Ctrl+F4、Ctrl+X、Ctrl+C、Ctrl+V、Ctrl+P 和 Ctrl+F。

  用 setCheckable(bool) 方法可以 设置按钮是否可以进行勾选如果多个有可勾选的按钮在同一容器中,且setAutoExclusive(bool) 设置为 True,则只能有一个按钮处于选中状态。对于 QCheckBox 按钮 autoExclusive 默认是 False。对 QRadioButton 默认是 True。用 setChecked(bool) 方法 设置按钮是否可以选中,用 isChecked() 方法 获取按钮的 checked 状态

  如果 setAutoRepeat(bool) 设置为 True,则在长时间按住按钮时,每经过固定长度的时间间隔后,信号 pressed()、released() 和 clicked() 就会发送一次,用 setAutoRepeatInterval(int) 方法设置这个时间间隔(毫秒),用 setAutoRepeatDelay(int)方法设置首次发送信号的延迟时间(毫秒)。

  按钮控件中类常用信号及其说明如下:

pressed()                        # 当按钮按下时发射信号
released()                       # 当按钮释放时发射信号
clicked(checked:bool=false)      # 当按钮被单击时发射信号
toggled(checked)                 # 当按钮状态改变时发射信号

  其中信号 pressed()、released() 和 clicked() 的发送是有先后顺序的。当在按钮上按下鼠标左键时,首先发送的是 pressed() 信号;在按钮上松开左键时,先发送 released() 信号,再发送 clicked() 信号如果在按钮上按下左键,然后按住左键不放,将光标移开按钮,则会发送 released() 信号,不会再发送 clicked() 信号

三、按压按钮控件

  QPushButton 按钮是最常用的按钮,单击按钮后通常完成对话框中的 “确定” “应用” “取消” 和 “帮助” 等功能, QPushButton 还可以设置菜单。

  用 QPushButton 类创建实例对象的方法如下所示。

QPushButton(parent:QWidget=None)
QPushButton(text:str, parent:QWidget=None)
QPushButton(icon:QIcon, text:str, parent:QWidget=None)

  其中 parent窗口 或者 容器类控件text 是 QPushButton 上 显示的文字QIcon图标

  QPushButton 继承自 QAbstractButton,具有 QAbstractButton 的方法。按压按钮 QPushButton 特有的方法如下所示。

# 实例方法
setMenu(menu:QMenu) -> None                 # 设置菜单
menu() -> QMenu                             # 获取菜单
setAutoDefault(arg__1:bool) -> None         # 设置按钮是否是自动默认按钮
autoDefault() -> bool                       # 获取按钮是否是自动默认按钮
isDefault() -> bool                         # 设置按钮是默认按钮,按Entry键发送该按钮信号
setFlat(arg__1:bool) -> None                # 设置按钮是否没有凸起效果
isFlat() -> bool                            # 获取按钮是否没有凸起效果# 槽函数
showMenu() -> None                          # 弹出菜单

  其中 setMenu(QMenu)方法可以为按钮 设置菜单defaultautoDefault 属性是在对话框窗口(QDialog)中有多个按钮情况下,按 Enter 键时,发送哪个按钮的信号。设置 default 和 autoDefault 属性时,有下面几种情况。

  • 当焦点在某个按钮上时(用 Tab 键切换焦点),按 Enter 键,则发送有焦点的按钮的信号;若所有按钮的这两个属性值均为 False,且焦点不在任何按钮上,则按 Enter 键时不发送按钮信号。
  • 若某个按钮的 default 为 True,其他按钮的 default 为 False,则不管其他按钮的 autoDefault 是否为 True,按 Enter 键时,有 default 的按钮发送信号。
  • 当前所有按钮的 default 属性为 False,并且有一些按钮的 autoDefault 属性为 True,当按 Enter 键时第 1 个设置了 autoDefault 属性的按钮发送信号。
  • 当多个按钮的 default 属性为 True 时,按 Enter 键发送第 1 个 default 为 True 的按钮的信号。

以上说的第 1 个按钮是指实例化按钮的顺序,而不是设置 default 或 autoDefault 的顺序。

import sysfrom PySide6.QtWidgets import QApplication, QWidget
from PySide6.QtWidgets import QPushButton
from PySide6.QtGui import QPixmapclass MyWidget(QWidget):def __init__(self):# 1.调用父类Qwidget类的__init__()方法super().__init__()# 2.调用setupUi()方法初始化页面self.setup_ui()def setup_ui(self):# 1.设置窗口对象大小self.setFixedSize(600, 400)# 2.创建按钮控件self.button = QPushButton(self)# 3.设置按钮控件的图标self.button.setIcon(QPixmap("assets/images/icon.ico"))# 4.设置按钮控件的显示文本self.button.setText("按钮1")# 5.设置按钮的快捷键self.button.setShortcut("Ctrl+O")# 6.定义信号与槽的连接# 如果槽函数有参数,那么在连接的时候,需要使用lambda表达式来传递参数self.button.clicked.connect(lambda:self.clicked(self.button))self.button.pressed.connect(self.pressed)self.button.released.connect(self.released)def pressed(self):print(f"你按下了【{self.sender().text()}】按钮")def released(self):print(f"你释放了【{self.sender().text()}】按钮")def clicked(self, button):print(f"你点击了【{button.text()}】按钮")if __name__ == "__main__":# 1.创建一个QApplication类的实例app = QApplication(sys.argv)# 2.创建一个窗口window = MyWidget()# 3.展示窗口window.show()# 4.进入程序的主循环并通过exit()函数确保主循环安全结束sys.exit(app.exec())

四、工具按钮控件

  QToolButton 控件是一个工具控件,它本质上是一个按钮,只是在按钮上提供了默认文本 "..." 和可选的箭头类型。QToolButton 控件的使用方法与 QPushButton 类似,不同的是,QToolButton 控件可以设置工具按钮的显示样式和箭头类型。

  其中,工具的显示样式通过 QToolButton 类的 setToolButtonStyle(style) 方法进行设置,主要支持以下 5 种样式。

Qt.ToolButtonStyle.ToolButtonIconOnly           # 只显示图标
Qt.ToolButtonStyle.ToolButtonTextOnly           # 只显示文本
Qt.ToolButtonStyle.ToolButtonTextBesideIcon     # 文本显示在图标的旁边
Qt.ToolButtonStyle.ToolButtonTextUnderIcon      # 文本现在在图标的下面
Qt.ToolButtonStyle.ToolButtonFollowStyle        # 跟随系统样式

  工具按钮的箭头类型通过 QToolButton 类的 setArrowType(type) 方法进行设置,主要支持 5 中箭头类型。

Qt.ArrowType.NoArrow        # 没有箭头
Qt.ArrowType.UpArrow        # 向上的箭头
Qt.ArrowType.DownArrow      # 向下的箭头
Qt.ArrowType.LeftArrow      # 向左的箭头
Qt.ArrowType.RightArrow     # 向右的箭头
import sysfrom PySide6.QtWidgets import QApplication, QWidget
from PySide6.QtWidgets import QToolButton
from PySide6.QtCore import Qtclass MyWidget(QWidget):def __init__(self):# 1.调用父类Qwidget类的__init__()方法super().__init__()# 2.调用setupUi()方法初始化页面self.setup_ui()def setup_ui(self):# 1.设置窗口对象大小self.setFixedSize(600, 400)# 2.创建工具按钮控件对象toolButton = QToolButton(self)# 3.设置工具按钮控件的尺寸toolButton.resize(100, 50)# 4.设置按钮所显示的文本toolButton.setText("按钮")# 5.设置按钮的快捷键toolButton.setShortcut("Ctrl+D")# 6.设置显示样式toolButton.setToolButtonStyle(Qt.ToolButtonStyle.ToolButtonTextBesideIcon)# 7.设置图标按钮的样式toolButton.setArrowType(Qt.RightArrow)if __name__ == "__main__":# 1.创建一个QApplication类的实例app = QApplication(sys.argv)# 2.创建一个窗口window = MyWidget()# 3.展示窗口window.show()# 4.进入程序的主循环并通过exit()函数确保主循环安全结束sys.exit(app.exec())

ToolButton 控件中的箭头图标默认大小为 16×16。如果想要改变箭头图标的大小,可以使用 setIconSize(QtCore.QSize(int width, int height)) 方法来设置;

五、命令链接按钮控件

  命令链接按钮控件 QCommandLinkButton 主要用于由多个对话框构成的向导对话框中,其外观通常类似于平面按钮,但除了普通按钮文本外,它上面还有功能描述性文本。默认情况下,它还会带有一个向右的箭头图标。

  用 QCommandLinkButton 类创建实例对象的方法如下。

QCommandLinkButton(parent:QWidget=None)
QCommandLinkButton(text:str, parent:QWidget=None)
QCommandLinkButton(text:str, description:str, parent:QWidget=None)

  其中 parent窗口 或者 容器类控件text 是 QCommandLinkButton 上 显示的本文description 是 QCommandLinkButton 上的 功能描述性文本

  QCommandLinkButton 类是从 QPushButton 类继承来的,因此有 QPushButton 的所有方法,如 setText(str)、text()、setQIcon(QIcon)、setFlat(bool)。另外,QCommandLinkButton 控件可以设置描述性文本,方法是 setDescription(str),获取描述文本的方法为 description()。QCommandLinkButton 控件的信号和槽函数与 QPushButton 控件的相同。

import sysfrom PySide6.QtWidgets import QApplication, QWidget
from PySide6.QtWidgets import QCommandLinkButton
from PySide6.QtCore import QSizeclass MyWidget(QWidget):def __init__(self):# 1.调用父类Qwidget类的__init__()方法super().__init__()# 2.调用setupUi()方法初始化页面self.setup_ui()def setup_ui(self):# 1.设置窗口对象大小self.setFixedSize(600, 400)# 2.创建命令钮控件对象commandLinkButton = QCommandLinkButton("按钮", "这是一个按钮", self)# 3.设置命令按钮控件的尺寸commandLinkButton.resize(150, 70)# 4.获取按钮所显示的文本print(commandLinkButton.text())# 5.获取功能描述文本print(commandLinkButton.description())# 6.设置箭头图标的大小commandLinkButton.setIconSize(QSize(30, 30))# 7.设置按钮的快捷键commandLinkButton.setShortcut("Ctrl+D")if __name__ == "__main__":# 1.创建一个QApplication类的实例app = QApplication(sys.argv)# 2.创建一个窗口window = MyWidget()# 3.展示窗口window.show()# 4.进入程序的主循环并通过exit()函数确保主循环安全结束sys.exit(app.exec())

六、单选按钮控件

  单选按钮控件 QRadioButton 为用户提供多个选项,一般只能选择一个。在一个容器中如果有多个单选按钮,那么这些按钮一般都是互斥的,选择其中一个单选按钮时,其他按钮都会取消选择。如果只有一个单选按钮可以通过单击该按钮改变其状态;而存在多个按钮时单击选中的按钮无法改变其状态,只能选择其他单击按钮才能改变其选中状态。

  用 QRadioButton 类创建实例对象的方法如下所示。

QRadioButton(parent:QWidget=None)
QRadioButton(text:str, parent:QWidget=None)

  其中 parent窗口 或者 容器类控件text 是 QRadioButton 上 显示的文字

  QRadioButton 是从 QAbstractButton 类继承来的,具有 QAbstractButton 的方法和信号。

import sysfrom PySide6.QtWidgets import QApplication, QWidget
from PySide6.QtWidgets import QRadioButton
from PySide6.QtGui import QIcon
from PySide6.QtCore import QSizeclass MyWidget(QWidget):def __init__(self):# 1.调用父类Qwidget类的__init__()方法super().__init__()# 2.调用setupUi()方法初始化页面self.setup_ui()def setup_ui(self):# 1.设置窗口对象大小self.setFixedSize(600, 400)# 2.创建单选按钮控件对象radioButton_1 = QRadioButton("男", self)radioButton_0 = QRadioButton("女", self)radioButton_2 = QRadioButton("保密", self)# 3.设置单选按钮控件的位置和尺寸radioButton_1.setGeometry(0, 0, 100, 50)radioButton_0.setGeometry(100, 0, 100, 50)radioButton_2.setGeometry(200, 0, 100, 50)# 4.设置按钮图标radioButton_1.setIcon(QIcon("1.ico"))radioButton_0.setIcon(QIcon("1.ico"))radioButton_2.setIcon(QIcon("1.ico"))# 5.设置按钮图标大小radioButton_1.setIconSize(QSize(15, 15))radioButton_0.setIconSize(QSize(15, 15))radioButton_2.setIconSize(QSize(15, 15))# 6.设置单选按钮默认选中radioButton_0.setChecked(True)# 7.设置按钮的快捷键radioButton_1.setShortcut("1")radioButton_0.setShortcut("0")radioButton_2.setShortcut("2")if __name__ == "__main__":# 1.创建一个QApplication类的实例app = QApplication(sys.argv)# 2.创建一个窗口window = MyWidget()# 3.展示窗口window.show()# 4.进入程序的主循环并通过exit()函数确保主循环安全结束sys.exit(app.exec())

七、复选框控件

  QCheckBox 控件的使用与 QRadioButton 控件类似,但它是为用户提供 “多选多” 的选择。另外,它除了选中和未选中两种状态之外,还提供了第三种状态:半选中。如果需要第三种状态,需要使用 QCheckBox 类的 setTristate(y=true) 方法使其生效,并且可以使用 checkState() 方法查询当前状态。

  QCheckBox 控件的三种状态及其说明如下:

Qt.CheckState.Checked               # 选中
Qt.CheckState.PartiallyChecked      # 半选中
Qt.CheckState.Unchecked             # 未选中

  用 QCheckBox 类创建实例对象的方法如下所示。

QCheckBox(parent:QWidget=None)
QCheckBox(text:str, parent:QWidget=None)

  其中 parent窗口 或者 容器类控件text 是 QRadioButton 上 显示的文字

  QCheckBox 是从 QAbstractButton 类继承来的,具有 QAbstractButton 的方法和信号。复选框特有的方法如下:

setTristate(y:bool=true) -> None                # 设置是否右不确定状态
isTristate() -> bool                            # 获取是否有不确定状态
setCheckState(state:Qt.CheckState) -> None      # 设置当前的选中状态
checkState() -> int                             # 获取当前的选中状态,返回值可以为0、1、2,分别表示没有选中、不确定、选中

  QChechBox 比 QAbstractButton 多了一个 stateChanged(int) 信号。stateChanged(int) 信号在状态发生变化时都会发送信号,而 toggled(bool) 信号在从不确定状态转向确定状态时不发送信号,其他信号相同。

import sysfrom PySide6.QtWidgets import QApplication, QWidget
from PySide6.QtWidgets import QCheckBox
from PySide6.QtGui import QIcon
from PySide6.QtCore import QSize, Qtclass MyWidget(QWidget):def __init__(self):# 1.调用父类Qwidget类的__init__()方法super().__init__()# 2.调用setupUi()方法初始化页面self.setup_ui()def setup_ui(self):# 1.设置窗口对象大小self.setFixedSize(600, 400)# 2.创建复选框控件对象,并指定父窗口checkBox_1 = QCheckBox("木之本樱", self)checkBox_2 = QCheckBox("御坂美琴", self)checkBox_3 = QCheckBox("夏娜", self)# 3.设置复选框控件的位置和尺寸checkBox_1.setGeometry(0, 0, 100, 50)checkBox_2.setGeometry(100, 0, 100, 50)checkBox_3.setGeometry(200, 0, 100, 50)# 4.设置复选框图标checkBox_1.setIcon(QIcon("1.ico"))checkBox_2.setIcon(QIcon("1.ico"))checkBox_3.setIcon(QIcon("1.ico"))# 5.设置复选框图标大小checkBox_1.setIconSize(QSize(15, 15))checkBox_2.setIconSize(QSize(15, 15))checkBox_3.setIconSize(QSize(15, 15))# 6.设置复选框可以半选中checkBox_1.setTristate(True)# 7.设置复选框状态checkBox_1.setCheckState(Qt.Checked)checkBox_2.setCheckState(Qt.CheckState.PartiallyChecked)checkBox_3.setCheckState(Qt.CheckState.Unchecked)# 8.定义信号与槽的连接checkBox_1.stateChanged.connect(self.stateChanged)checkBox_2.toggled.connect(self.toggled)def stateChanged(self, state):if state == 0:print("按钮的状态为未选中")elif state == 1:print("按钮的状态为不确定")elif state == 2:print("按钮的状态为选中")def toggled(self, state):if state:print("选中按钮")else:print("未选中按钮")if __name__ == "__main__":# 1.创建一个QApplication类的实例app = QApplication(sys.argv)# 2.创建一个窗口window = MyWidget()# 3.展示窗口window.show()# 4.进入程序的主循环并通过exit()函数确保主循环安全结束sys.exit(app.exec())

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/855650.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

opencascade配置笔记

下载occ 网址参考网址 c++引用lib库 参考网址 vs使用qt插件 参考网址 参考网址

大规模可观测性揭秘:Netflix 如何通过标题玩转全球内容发布?

1 导言 在 Netflix,我们每月管理着上千个全球内容发布项目,每年的投资额高达数十亿美元。确保每部影片在我们平台上的成功和可发现性是我们的首要任务,因为我们的目标是将每个故事与合适的受众联系起来,让我们的会员满意。为了实现这一目标,我们致力于建立强大的系统,提…

Netty的高性能之道

一、概述 1.1 惊人的性能数据 最近一个圈内朋友通过私信告诉我,通过使用Netty4 + Thrift压缩二进制编解码技术,他们实现了10W TPS(1K的复杂POJO对象)的跨节点远程服务调用。相比于传统基于Java序列化+BIO(同步阻塞IO)的通信框架,性能提升了8倍多。 事实上,我对这个数据…

javaweb实战02

javaweb实战02 本次开始配置目录和包以及构建数据库然后就可以按照业务逻辑书写页面,页面包含登录和注册两个功能 首先开发登录页面 <%@ page contentType="text/html;charset=UTF-8" language="java" %> <%@ page isELIgnored="false"…

1大模型应用开发基础

一、目标 懂得AI,懂得编程、懂得业务的超级个体,将会是AGI时代最重要的人。 AI使得一个人能够干多个人的活 想要做到“AI全栈”需要涉及的知识面是非常广泛的,单单学习一门课程是不能全部涉及的 我们首先需要做的是入门,后面走的深入,走的远只能靠自己,依靠社群,和AI的进…

grpc安装(windows or Linux)

grpc安装(windows or Linux) 下载源码 这里使用 gRPC 最新版本源代码进行编译和安装,版本号为 v1.50.0, 以下为安装步骤: 一、使用Git克隆gRPC到本地 在终端中打开某一文件夹,建议新建一个单独存放 gRPC 源代码的文件夹,输入: git clone -b v1.50.0 https://github.com/…

Golang内存模型与源码解析

0、引言 本篇笔记用于记录作者在学习Golang的GC模型之前,对Golang内存模型的学习。目前使用的Go版本为1.22.4 1、Golang内存管理宏观结构 假设我们每次向内存池申请空间时,都需要频繁地向操作系统发出请求,这不仅会增加内存分配的时间,还可能引入竞争和锁的开销,从而导致性…

图床试验

本文来自博客园,作者:Glowingfire,转载请注明原文链接:https://www.cnblogs.com/Glowingfire/p/18617999

一文搞定理解RPC

前言RPC概念RPC协议RPC组成RPC协议RPC框架RPC的优点RPC与HTTP的区别 前言 RPC的概念相信很多软件从业人员或多或少都接触过,从开发到测试都可能需要跟它打交道。 但是对于为什么要用RPC?RPC的优点是什么?RPC是什么原理?它跟HTTP有什么不同?相信并不是每个人都比较熟悉。 那…

全场景一站式2024最新vmware环境下安装win7并且破解QTP

目录VMwareVMware和Ubuntu下载链接下载Win 7 系统各个操作系统网站激活码是什么查看是否激活激活操作vmware下安装ubuntu创建虚拟机下载VMtool灰色灰色按键点击不了下载提示有问题原因文件传递共享文件借助外界U盘有了VMTool就可以直接拖拽!!!!有了VMTool就可以全屏化——倒…

20222321 2024-2025-1 《网络与系统攻防技术》实验八实验报告

一.实验内容 (1)Web前端HTML 能正常安装、启停Apache。理解HTML,理解表单,理解GET与POST方法,编写一个含有表单的HTML。 (2)Web前端javascipt 理解JavaScript的基本功能,理解DOM。 在(1)的基础上,编写JavaScript验证用户名、密码的规则。在用户点击登陆按钮后回显“欢迎…