python-图形用户界面

2023-10-27

图形用户界面

1.python中图形界面库 界面开发

  • Tkinter 是 Python 官方提供的图形用户界面开发库,用于封装 TGUI 工具包,跨平台。
  • PyQt 是非 Python 官方提供的图用户界面开发库,用于封装 Qt 工具包,跨平台。
  • wxPython 是非 Python 官方提供的图研用户界面开发库,也跨平台。(推荐)

2.安装wxpython

pip 是python提供的库管理工具

在cmd 控制中 出入:
pip install wxpython
或者使用镜像下载 :
pip install wxpython - i https://pypi.tuna.tsinghua.edu.cn/simple

3.第一个wxpython程序

若要构建一个最简单的wxpython程序,则需要至少需要一个应用(wx.App)对象和一个窗口(wx.Frame)对象

4.自定义窗口类

模板代码:

import wx
#直定义窗口类myFrame
class MyFrame(wx.Frame)
	def __init__(self):
		super().__init__(None, title ="第一个wxpython程序", size = (400, 300), pos(100, 100))
	 	#你的代码...

#创建窗口对象
app = wx.App()
#创建窗口对象
frm = MyFrame()
#显示窗口
frm.Show

#进入主事件循环

app.MainLoop()

5.在窗口中添加控件

  • 我们在窗口中添加两个控件:
    一个面板(panel)和一个静态文件(StaticText)。面板是一个没有标题的容器(可以容纳其他控件的控件)。
    在这里插入图片描述
import wx
#直定义窗口类myFrame
class MyFrame(wx.Frame)
	def __init__(self):
		super().__init__(None, title ="第一个wxpython程序", size = (400, 300), pos(100, 100))
	 	#你的代码...
	 	panel = wx.Panel(pannet = self)
	 	statictext = wx.StaticText(parent=panel, label='Hello world', pos=(10, 10))
	 	





#创建窗口对象
app = wx.App()
#创建窗口对象
frm = MyFrame()
#显示窗口
frm.Show

#进入主事件循环

app.MainLoop()

panel = wx.Panel(pannet = self) 语句解释:
panel 一般作为容器类型控件 (可放入其他面板或者控件)
其中self 为MyFrame对象

panel:创建面板对象,参数parent传递的是self,即设置面板所在的父容器为当前窗口对象
创建静态文本(staticText)对象,将静态文本对象放到panel父容器面板中
参数label是在静态文本对象上显示的文字
参数pos用于设置静态文本对象位置

事件处理

  • 事件源:事件发生的场所,就是各个控件li’tu。例如,按键事件的事件源就是按钮
  • 事件:wxpython中的事件被封装为事件类wx,Event 及其子类。例如:按键事件类是:wx.CommentEvent, 鼠标事件类是wx.MoveEvent.
  • 事件处理程序:一个响应用户事件的方法。
    在这里插入图片描述
import wx
#直定义窗口类myFrame
class MyFrame(wx.Frame)
	def __init__(self):
		super().__init__(None, title ="事件处理", size = (300, 180))
	 	#你的代码...
	 	panel = wx.Panel(pannet = self)
	 	self.statictext = wx.StaticText(parent=panel, label="请点击OK按钮", pos=(110, 20))
	 	b = wx.Button(parent =self, label = 'OK!',pos = (100, 50))
	 	self.Bind(wx.EVT_BUTTON, self.on_click, b)
	def on_click(self, on_clock, b)
		self.statictext.SetLabelText('hello,world')
	 	
#创建窗口对象
app = wx.App()
#创建窗口对象
frm = MyFrame()
#显示窗口
frm.Show

#进入主事件循环

app.MainLoop()

panel = wx.Panel(pannet = self)

button :为创建按钮对象

self.Bind(wx.EVT_BUTTON, self.on_click, b) 语句解释:

第一个参数 wx.EVT_BUTTON: 绑定事件,wx.EVT_BUTTON 是事件类型,即按键单击事件;
第二个参数 self.on_click: 是事件处理程序
第三个参数 b :是事件源,即按钮对象

  • 将 button 事件绑定到 def on_click(self, on_clock, b) 事件处理程序上
    因为是将事件处理程序 写入到MyFrame中 实际上 def on_click(self, on_clock, b) 就为 MyFrame的成员方法 故而第一个参数为 self
    第二个参数 为事件对象(例题代码中 不太需要)

布局管理

1.盒子布局管理器

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

在这里插入图片描述

创建盒子管理器
  • 1.设置为水平方向布局,wx.HORIZONTAL是默认值,可以省略
    (一旦省略就默认为 水平方向布局)
wx.BoxSizer(wx.HORIZONTAL) 
  • 2.设置为垂直方向布局
wx.BoxSizer(wx.VERTICAL) 
添加子程序窗口(或者控件)到父窗口
  • 1.wx.BoxSizer对象的ADD()方法添加子程序(或控件)到父窗口
Add(window, proportion = 0, flag=0,border=0)

  • 添加到window父窗口中去
  • 若要指定俩个按钮到容器中并且权重为1/2 则propertion =1 ;若其中一个为另一个的2倍,则2倍的proportion =2 1倍的proportion =1
  • flag中有存在边框时候 可以调整border参数指定边框参数
  • 2.添加到另外一个布局对象,用于布局嵌套
Add(sizer, proportion=0, flag=0, border=0)

将一个布局管理对象添加到另一个管理对象中,起到嵌套的作用

flag对其标志

在这里插入图片描述

指定边框的标志

在这里插入图片描述

调整尺寸的标志

在这里插入图片描述

2.重构事件处理实例

在这里插入图片描述

import wx
#直定义窗口类myFrame
class MyFrame(wx.Frame)
	def __init__(self):
		super().__init__(None, title ="事件处理", size = (300, 180))
	 	panel = wx.Panel(pannet = self)
	 	self.statictext = wx.StaticText(parent=panel, label="请点击OK按钮", pos=(110, 20))
	 	b = wx.Button(parent =self, label = 'OK!',pos = (100, 50))
	 	self.Bind(wx.EVT_BUTTON, self.on_click, b)
	 	
	 	#创建垂直方向的盒子布局管理器对象vbox
	 	vbox = 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.BUTTOM, border =30)
		#设置面板(panel)采用vbox布局管理器
		panel.SetSizer(vbox)


	def on_click(self, on_clock, b)
		self.statictext.SetLabelText('hello,world')


	 	
#创建窗口对象
app = wx.App()
#创建窗口对象
frm = MyFrame()
#显示窗口
frm.Show

#进入主事件循环

app.MainLoop()
  • vbox.Add = (self.statictext, proportion = 1,flag = wx.ALIGN_CENTER_HORIZONTAL|wx.FIXED_MINSIZE|wx.TOP, border =30) 语句解释
  • wx.ALIGN_CENTER_HORIZONTAL 控件水平居中;
  • wx.FIXED_MINSIZE 两个控件proportion都为1,所以两个控件各占二分之一;
  • wx.FIXED_MINSIZE 刚好包裹控件;
  • wx.TOP设置顶部有边框 ;border =30设置边框位30;
  • vbox.Add(b, proportion = 1,flag =wx.EXPAND|wx.BUTTOM, border =30)语句解释

wx.EXPAND 完全填满有效空间

  • panel.SetSizer(vbox) 语句解释

以为将所有空间调用到面板panel中 故调用panel.SetSizer(vbox)

3.盒子布局管理器嵌套示例

在这里插入图片描述

将两个文本放到水平文本管理器中,让后把水平文本管理器和静态文本放到垂直的文本管理器中

import wx
#直定义窗口类myFrame
class MyFrame(wx.Frame)
	def __init__(self):
		super().__init__(None, title ="布局管理器嵌套", size = (300, 120))
	 	panel = wx.Panel(pannet = self)
	 	self.statictext = wx.StaticText(parent=panel, label="请单击按钮")
	 	b1= wx.Button(parent = panel, id = 10, label = 'BUTTON')
	 	b2= wx.Button(parent = panel, id = 11, label = 'BUTTON')
	 	
		#创建水平方向的盒子布局管理器中hbox对象
		hbox = wx.BoxSizer(wx.HORIZONTAL)
		#添加吧b1到hbox布局管理器
		
		hbox.Add = (b1, proportion = 1,flag =wx.EXPAND|wx.ALL, border =10)
		#添加吧b2到hbox布局管理器
	 	hbox.Add = (b2, proportion = 1,flag =wx.EXPAND|wx.ALL, border =10)
	 	#创建垂直方向的盒子布局管理器对象vbox
	 	vbox = wx.BoxSizer(wx.VERTICAL)
	 	#添加静态文本到vbox管理器
	 	vbox.Add = (self.statictext, proportion = 1,
	 		flag = wx.ALIGN_CENTER_HORIZONTAL|wx.FIXED_MINSIZE|wx.TOP, border =10)
	 	#添加hboxb布局管理器对象到垂直vbox布局管理器对象
		vbox.Add(hbox, proportion = 1,flag =wx.CENTER)
		#设置面板(panel)采用vbox布局管理器
		panel.SetSizer(vbox)
		
		#将两个按钮 单击事件绑定到self.on_self方法
		self.Bind(wx.EVT_BUTTON, self.on_click, id = 10,id2 = 20)

	def on_click(self, on_clock, b):
		event_id = event.GetId()
		print(event_id)
		if event_id == 1:  #根据id判断单击了哪个按键
			self.statictext.SetLabelText('button1单击'else:
			self.statictext.SetLabelText('button2单击'#创建窗口对象
app = wx.App()
#创建窗口对象
frm = MyFrame()
#显示窗口
frm.Show

#进入主事件循环

app.MainLoop()
  • self.Bind(wx.EVT_BUTTON, self.on_click, id = 10,id2 = 20) 语句解释:

从id=10到id=20 所有的按键 指定调用 self.on_click 这个方法

控件

1.文本输入控件

在页面中实现三个文本输入控件和三个静态文本。
在这里插入图片描述

import wx
#直定义窗口类myFrame
class MyFrame(wx.Frame)
	def __init__(self):
		super().__init__(None, title ="事件处理", size = (300, 180))
	 	panel = wx.Panel(pannet = self)
	 	tc1 = wx.TextCtrl(panel)
		tc2 = wx.TextCtrl(panel, style=wx.TE_PASSWORD)
		tc3 = wx.TextCtrl(panel, style=wx.MULTILINE)
#创建多行文本输入控件,设置style = wx.TE_MULTILINE
		


		userid = wx.StaticText(panel, label ="用户ID:")
		pwd = wx.StaticText(panel, label ="密码:")
		content = wx.StaticText(panel, label ="多行文本:")
		#创建垂直方向的盒子布局管理器对象vbox
		vbox = wx.BoxSizer(wx.VERITICAL)
		
		#添加控件到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.ALL, border = 10)
		vbox.Add(content, flag = wx.EXPAND |wx.LEFT, border = 10)
		vbox.Add(tc3, flag = wx.EXPAND |wx.ALL, border = 10)

		#设置面板(panel)采用vbox布局管理器
		panel.SetSizer(vbox)
		#设tc1初始值
		tc1.SetValue('tony')
		#tc1值
		print('读取用户ID:{0}'.format(tc1.GetValue))

	def on_click(self, on_clock, b)
		self.statictext.SetLabelText('hello,world')
	 	
#创建窗口对象
app = wx.App()
#创建窗口对象
frm = MyFrame()
#显示窗口
frm.Show

#进入主事件循环

app.MainLoop()

2.复选框和单选按键

在这里插入图片描述

import wx
#直定义窗口类myFrame
class MyFrame(wx.Frame)
	def __init__(self):
		super().__init__(None, title ="复选框和单选按钮", size = (300, 120))
		panel = wx.Panel(pannet = 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++')
		self.Bind(wx.EVE_CHECKBOX, self.on_checkbox_click, id=1 ,id2=3)
		#绑定为1~3的所有控件的事件处理到on_checkbox_click()的方法

		st2 = wx.StaticText(panel, label = '选择性别:')
		radio1 =  wx.RadioButton(panel,id=4, label = '男', style=wx.RB_GROUP)
		radio2 =  wx.RadioButton(panel,id=5, label = '女')
		self.Bind (wx.EVT_RADIOBUTON, self.on_radio1_click, id=4, id2 = 5)
		#绑定id 从4 到5的控件到 on_radio1_click() 方法

		hbox1 = wx.BoxSizer()
		hbox1.Add(st1, flag, wx.LEFT|RIGHT, border = 5)
		hbox1.Add(cb1)
		hbox1.Add(cb2)
		hbox1.Add(cb3)

		hbox2 = wx.BoxSizer()
		hbox2.Add(st2, flag, wx.LEFT|RIGHT, border = 5)
		hbox2.Add(radio1)
		hbox2.Add(radio2)

		
		#设置面板(panel)采用vbox布局管理器
		panel.SetSizer(vbox)
		
#你的方法...
	 	
	def on_checkbox_click(self, event):
		cb = event.GetEventObject()
		print('选择{0},状态{1}'.format(cb.Getlabel(), event.IsCheck()))
	def on_radio1_click (self, event):
		rb = event.GetEventObeject()
		print('第一组 {0}被选中 '.format(cb.Getlabel()))
	 	
#创建窗口对象
app = wx.App()
#创建窗口对象
frm = MyFrame()
#显示窗口
frm.Show

#进入主事件循环
  • radio1 = wx.RadioButton(panel,id=4, label = ‘’, style=wx.RB_GROUP)

设置 style=wx.RB_GROUP的单选按钮,说明是一个组的开始,直到遇到另外设置style=wx.RB_GROUP的wx.RadioButton 单选按键为止都是同一个组。
(即在两个wx.RadioButton 之间的按键与第一个按键为同一组,状态为互斥)
所以radio1和radio2是同一组,即这两个单选按钮是互斥的

  • cb = event.GetEventObject()
    print(‘选择{0},状态{1}’.format(cb.Getlabel(), event.IsCheck()))

从事件对象中取出事件源(复选框)
cb.Getlabel() :是获取事件源标签
event.IsCheck() :获得复选栏的状态

3.列表

在这里插入图片描述

import wx
#直定义窗口类myFrame
class MyFrame(wx.Frame)
	def __init__(self):
		super().__init__(None, title ="复选框和单选按钮", size = (300, 120))
		panel = wx.Panel(pannet = self)	
		
		st1 = wx.StaticText(panel, label='选择你喜欢的编程语言:')
		list1 = ['python' , 'c++', 'java' ]
		lb1 = wx.ListBox(panel, choices=list1, style= wx.LB_SINGLE)
		self.Bind(wx.EVT_LISTBOX, self.on_listbox1, lb1)
		#绑定列表选择事件 wx.EVT_LISTBOX 到 self.on_listbox()方法
		
		st2 = wx.StaticText(panel, label='选择你喜欢的吃的水果:')
		list2 = ['苹果' , '香蕉', '橙子' ]
		lb2 = wx.ListBox(panel, choices=list2, style= wx.LB_EXPENDED)
		self.Bind(wx.EVT_LISTBOX, self.on_listbox2, lb2)

		hbox1 = wx.BoxSizer()
		hbox1.Add(st1, proportion=1,flag = wx.LEFT|RIGHT, border = 5)
		hbox1.Add(lb1, proportion=1)

		hbox2 = wx.BoxSizer()
		hbox2.Add(st2, flag = wx.LEFT|RIGHT, border = 5)
		hbox2.Add(lb2, flag = wx.LEFT|RIGHT, border = 5)
		
		panel.SetSizer(vbox)

	 	
	def on_listbox1(self, event):
		cb = event.GetEventObject()
		print('选择{0}'.format(listbox.GetSelection()))#返回单个选中项目的索引序号
	def on_listbox2 (self, event):
		rb = event.GetEventObeject()
		print('选择{0}'.format(listbox.GetSelections()))#返回多个选中项目的索引序号
	 	
#创建窗口对象
app = wx.App()
#创建窗口对象
frm = MyFrame()
#显示窗口
frm.Show
  • lb1 = wx.ListBox(panel, choices=list1, style= wx.LB_SINGLE)
  • lb2 = wx.ListBox(panel, choices=list2, style= wx.LB_EXPENDED)

其中 style= wx.LB_SINGLE 和 style= wx.LB_EXPENDED 表示创建单选列表控件和多选列表控件

静态图片控件

两个按钮进行图片的切换
在这里插入图片描述

import wx
#直定义窗口类myFrame
class MyFrame(wx.Frame)
	def __init__(self):
		super().__init__(None, title ="复选框和单选按钮", size = (300, 120))
		self.panel = wx.Panel(pannet = self)	

		self.bmps = [wx.Bitmap('images/bird5.jpg',wx.BITMAP_TYPE_GIF),
					 wx.Bitmap('images/bird4.jpg',wx.BITMAP_TYPE_GIF),
					 wx.Bitmap('images/bird3.jpg',wx.BITMAP_TYPE_GIF)]
					 #创建wx.Bitmap图片对象的列表
					 
		b1 = wx.Button(self. panel, id=1, label='Button1')
		b2 = wx.Button(self. panel, id=1, label='Button2')
		self.Bind(wx.EVT_Button, self.on_click, id=1, id2=2 )
		
		self.image=wx.StaticBitmap(self.panel, bitmap=self.bmps[0])
		#静态图片控件对象,self.bmps[0] 是静态图片控件要显示的图片对象
		
		
		#创建垂直方向的布局控件对象vbox 
		vbox2 = wx.BoxSizer(VERITICAL)
		#添加控件到布局管理器对象vbox
		vbox.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:  #根据id判断单击了哪个按键 实现图片切换
			self.image.SetBitmap('self.bmp[1]')
		else:
			self.image.SetBitmap('self.bmp[2]')
		self.panel.Layout
		#重新设置panel面板布局

	 	
#创建窗口对象
app = wx.App()
#创建窗口对象
frm = MyFrame()
#显示窗口
frm.Show

	 	
  • self.panel = wx.Panel(pannet = self)

创建一个面板,它是该类的实例变量
将panel声明为成员变量 ,才可在事件处理方法中访问。(重新布局)

  • self.image=wx.StaticBitmap(self.panel, bitmap=self.bmps[0])

在创建静态图片空间时 ,将其声明为成员变量·。因为在方法中进行访问

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

python-图形用户界面 的相关文章

  • scikit-learn 中 ColumnTransformer 的自定义 Transformer 出现问题

    我想在 scikit learn 中创建一个稳定的管道来预处理数据 我试图完成的第一步是估算None对数据框中不同列应用不同策略的值 即用平均值 中位数或其他描述性统计数据替换 但是 我 我开始使用SimpleImputer变压器连同Col
  • LSTM 和 CNN:ValueError:检查目标时出错:预期 time_distributed_1 有 3 个维度,但得到形状为 (400, 256) 的数组

    我要申请CNN and LSTM在我的数据上 我只选择一小部分数据 我的训练数据大小是 400 50 我的测试数据是 200 50 仅使用 CNN 模型 它可以正常工作 没有任何错误 只是在添加 LSTM 模型时出现了很多错误 model
  • 硒网格监听节点端口而不是集线器端口

    对于我的测试 我在不同的端口上本地运行网格和节点 java jar usr bin selenium server jar port 4444 role hub java jar usr bin selenium server jar ro
  • tkinter 上的“NoneType”对象没有属性“get”错误[重复]

    这个问题在这里已经有答案了 我最近开始使用 python 3 6 进行编码tkinter并尝试创建我自己的项目repl it 该项目是一个简单的交互式待办事项列表 但是我陷入困境并且无法使该功能正常工作 该函数只是简单地获取条目并将其添加到
  • Pyjnius导入jar文件

    Pyjnius 允许您为 java 类创建 python 包装器 例如 Hardware autoclass org myapp Hardware 有没有办法像这样导入现有的 jar 文件 语法是什么样的 您可以将 jar 添加到 CLAS
  • Django 和 AWS 简单电子邮件服务 [重复]

    这个问题在这里已经有答案了 我正在尝试启动并运行 django 站点 并且正在尝试启用 django 的标准密码重置服务 我的网站由 AWS EC2 托管 因此我想将 AWS SES 用于我的电子邮件服务 但是 我无法使 smtp 连接正常
  • Python中非常大的整数的math.pow是错误的[重复]

    这个问题在这里已经有答案了 我试图通过计算一个整数的非常大的幂来打印一个非常大的数字 尽管我的代码是正确的 但我没有观察到所需的输出 一般来说 Python解释器可以打印系统内存支持的非常大的整数 考虑到这个假设 下面是我正在运行的代码 a
  • UTF-8 解码如何知道字节边界?

    我一直在阅读大量有关 unicode 编码的文章 尤其是有关 Python 的文章 我想我现在对此已经有了相当深入的了解 但仍有一个小细节我有点不确定 解码如何知道字节边界 例如 假设我有一个带有两个 unicode 字符的 unicode
  • 如何在Python中重命名virtualenv?

    我拼错了名字virtualenv使用以下方法初始化它 virtualenv vnev 我实际上打算创建一个名为的环境venv 尝试重命名后vnev文件夹到venv 我发现这并没有提供太多帮助 激活环境的名称仍然重命名旧的vnev mv vn
  • 桨在移动时留下痕迹(Pygame Pong 游戏)[重复]

    这个问题在这里已经有答案了 我的游戏中的球拍有问题 每次我试图移动它时 桨都会留下一条 痕迹 我想这是因为我的代码没有删除旧位置的前一个桨 如果是的话怎么删除之前的呢 我应该使用blit Code import pygame sys ran
  • Python 的二进制字符串列表

    我有一个像这样的二进制字符串 1100011101 我想将其解析为一个列表 其中每个 1 或 0 块都是列表中的单独值 例如 1100011101 变成 11 000 111 0 1 您可以通过使用正则表达式而不是从中获得一点 次要 性能g
  • Web 应用程序框架:C++ 与 Python

    作为一名程序员 我熟悉 Python 和 C 我正在考虑编写自己的简单 Web 应用程序 并且想知道哪种语言更适合服务器端 Web 开发 我正在寻找一些东西 它必须是直观的 我认识到 Wt 存在并且它遵循 Qt 的模型 我讨厌 Qt 的一件
  • 在Python中从整个图像中检测表格部分

    我有一张尺寸为 3500x5000 的图像 现在我只想检测整个图像中的表格部分 如果不能直接进行 OCR 处理 则对其进行裁剪和旋转 经过所有搜索后 我想到了使用裁剪图像中的每个单元格的想法https medium com coinmonk
  • Kivy错误(python 2.7):sdl2导入错误

    我尝试在我的 Python 2 7 项目 在 PyCharm Windows 10 环境中 上使用 kivy 但出现以下错误 如果有人可以帮助我吗 谢谢 PS 我多次尝试卸载 重新安装库等 并按照像这样的帖子上的建议进行操作 但它不起作用
  • 按键合并的两个字典的值的并集

    我有两本词典 d1 a x y b k l d2 a m n c p r 如何合并这两个字典以获得这样的结果 d3 a x y m n b k l c p r 当字典的值是简单类型 如 int 或 str 时 这有效 d3 dict i a
  • 打包布尔数组需要通过 int (numpy 1.8.2)

    我正在寻找更紧凑的方式来存储布尔值 numpy 内部需要 8 位来存储一个布尔值 但是np packbits允许打包 他们 这真是太酷了 问题是要打包在4e6字节数组a32e6字节我们需要首先使用的布尔值数组256e6字节将布尔数组转换为
  • 从 Python 访问 802.11 无线管理帧

    我想从 Linux 上的 Python 嗅探 802 11 管理 探测请求 帧 这可以从 Scapy 中实现 如下所示 coding utf 8 from scapy all import def proc p if p haslayer
  • Django 表单中的只读字段

    如何在 Django 表单中将字段设置为只读 我知道如何禁用某个字段 但这不是我想要的 任何帮助 将不胜感激 您可以使用可选的attrs定义时的参数Field 以机智 somefield forms CharField widget for
  • Django Python - LDAP 身份验证

    我目前正在研究 Django Python 我的目标是从 Ldap 目录对用户进行身份验证 我确实有 python 代码来访问 ldap 目录并检索信息 Code import ldap try l ldap open ldap forum
  • 我收到错误:rest_framework.request.WrappedAttributeError:'CSRFCheck'对象没有属性'process_request'

    urls py from django conf urls import url from django contrib import admin from django conf import settings from django c

随机推荐

  • 将图片保存成字符串,以及字符串转换为图片

    将图片保存成字符串的样子保存在excel表格 上代码 public class FileConfig 当前项目目录下的files public static String FILE ADDRESS PATH System getProper
  • C语言入门之工资计算

    include
  • Python 第一章 基础知识(3) 数字和表达式 加减乘除

    第一章 基础知识 3 数字和表达式 运行IDLE 在提示符前输入 加法 gt gt gt 2 2 4 lt 解释器会得出2 2的答案4 除法 gt gt gt 1 2 0 lt 解释器会给出截除掉小数部分的1除以2的商 gt gt gt 1
  • Mybatis-plus:条件查询的方法

    方法1 QueryWrapper
  • windows系统80端口号被System占用

    废话不多说 直入主题 windows系统80端口号被System占用 查找追踪看到是 PID 4 的一个System进程在占用 网上所说的解决方法 方法一 1 Win R 组合快捷键 快速打开运行命令框 在打开后面键入命令 Regedit
  • 码农得用专用的Code字体,推荐几款专业级别的程序员专用字体

    别怀疑 下面的这些字体是程序员专用的编码字体 尤其是带 Code 名字的字体 从名字上看就知道 专门用来Code用的 1 Source Code Pro PS那个公司知道吧 就是这个公司专门为程序员设计的等宽字体 要知道 写代码 一般的字体
  • 光束法空三的计算问题,误差方程的多余观测数,未知数个数、多余观测值的计算

    1 未知数个数 必要观测值个数 未知数个数 t u 3 未知点数目 6 相片数目 3 代表一个未知点的 x y z 6代表一张像片的6个外方位元素 都是待定值 都是未知数 2 观测值个数 1 未知数个数求法 1 观测值个数 n 2 m 的含
  • sparksql压缩小文件

    SET spark sql shuffle partitions 2 SET spark sql adaptive enabled true SET spark sql adaptive shuffle targetPostShuffleI
  • Kotlin 常见符号大全

    gt 下划线 as 1 修饰在成员变量的类型后面 表示这个变量可以为null 系统在任何情况下不会报它的空指针异常 修改在对象后面代表该对象如果为null则不处理后面逻辑 如果我们定义的变量是一个可以为空的类型 则要用 String 在变量
  • Qt、MinGW编译OpenCV 4.5.4(包含opencv_contrib)详细过程

    Qt MinGW CMake编译OpenCV 4 5 4 包含opencv contrib 详细过程 目录 Qt MinGW CMake编译OpenCV 4 5 4 包含opencv contrib 详细过程 1 工具下载准备 2 CMak
  • Linux·异步IO编程框架

    hi 大家好 今天分享一篇Linux异步IO编程框架文章 对比IO复用的epoll框架 到底性能提高多少 让我们看一看 译者序 本文组合翻译了以下两篇文章的干货部分 作为 io uring 相关的入门参考 How io uring and
  • ZGC的运行过程以及读屏障

    ZGC运作过程 ZGC的运作过程大致可划分为以下四个大的阶段 并发标记 Concurrent Mark 与G1一样 并发标记是遍历对象图做可达性分析的阶段 它的初始标记 Mark Start 和最终标记 Mark End 也会出现短暂的停顿
  • 了解前端监控和埋点(持续更新中,,,)

    基本概念 前端埋点主要是为了运营以及开发人员采集用户行为数据 以及页面性能等数进行后续的数据分析 一般目的 1 性能监控 2 数据监控 3 异常监控 埋点方案 5 代码埋点 6 无埋点 7 可视化埋点 埋点的目的 在现今用户就是上帝的年代
  • 会话保持和非会话保持

    会话保持 方式 1 session机制保持会话 缺点 1 1当前服务器处于高并发的时候 对于服务器是一个压力 占用大量的服务器资源 1 2如果一个业务系统是分布式部署在多个服务器的情况下 session不能相互间共享 解决方式 1 3高并发
  • 十个常见异常实例

    第一个 try float j 1 0 catch Exception e exceptions add e 第二个 try String s null String m s toLowerCase catch Exception e ex
  • 常见软件开发模式

    一 瀑布模型 瀑布模型的特点 1 阶段间具有顺序性和依赖性 2推迟实现 3质量保证的观点 总结 瀑布模型是文档驱动的模型 遵守这个约束可使软件维护变得比较容易一些 从而显著降低软件预算 二 快速原型 快速分析 gt 构造 gt 运行 gt
  • NOIP 1998 普及组 2的幂次方 解题报告

    虽说是普及组 还是不好处理啊 想了好久 最后决定使用一个栈来维护所有的枚举 总的来说我这里算是用了两个栈 因为BFS本身就能算一个栈 这个题目真的有挑战性啊 算法没什么 但是规律方面的东西好重要饿 不说了 代码 include
  • 逻辑运算符详细讲解(基础版)

    本文将详细讲解6个逻辑运算符的应用 总结放在最后了哦 1 与 gt 见false则为false 这里用两个关系表达式进行比较 只要其中一个运算结果为false则最后结果也为false 2 或 gt 见true则为true 这里用两个关系表达
  • openGauss学习笔记-66 openGauss 数据库管理-创建和管理schema

    文章目录 openGauss学习笔记 66 openGauss 数据库管理 创建和管理schema 66 1 背景信息 66 2 注意事项 66 3 操作步骤 66 3 1 创建管理用户及权限schema 66 3 2 使用schema 6
  • python-图形用户界面

    图形用户界面 1 python中图形界面库 界面开发 Tkinter 是 Python 官方提供的图形用户界面开发库 用于封装 TGUI 工具包 跨平台 PyQt 是非 Python 官方提供的图用户界面开发库 用于封装 Qt 工具包 跨平