wxpython总结(1)
wxPython布局管理器(sizer)学习(1)

wxPython布局管理器(sizer)学习(1)个⼈认为学习GUI程序开发,最重要的两个基础点就是:事件处理和界⾯布局。
事件处理能够让你在界⾯上的控件被⿏标、按键等触发的时候做出合适的响应,⽐如点击“保存”按钮之后弹出标准的⽂件保存对话框。
另外⼀件重要的就是界⾯的布局,之所以要有GUI程序,就是为了有良好的⽤户体验,如果⼀个软件界⾯布局乱七⼋糟的话,肯定是不合适的。
⾄于按钮、⽂本框、静态⽂本这些组件,不过是通过相应的类产⽣实例并⽤Add之类的⽅法添加到⾯板上⽽已。
wxPython的sizer是⽤于⾃动布局⼀组窗⼝(之前提到过GUI程序开发中窗⼝的概念,⼀个按钮、⼀个⽂本框都叫窗⼝(window),⽽软件的主体结构,通常为矩形,我们称之为框架(Frame))的算法。
使⽤sizer的好处是当容器(⼀个Frame或Panel)的尺⼨被⽤户调整时,容器内的组件会⾃动重新计算最优化的⼤⼩和位置,不⽤像绝对定位那样为每⼀个组件设计⼤⼩和位置。
sizer的缺陷也很明显,那就是有⼀定的局限性,因为sizer的类型是有限的,在布局上不能像绝对定位那样随⼼所欲。
需要注意的是,sizer本⾝并不是容器,只是⼀种算法,把组件添加到某个sizer,实际上是说这个组件⽤这个sizer来计算它该如何布局,⽽实际上组件的容器还是⼀个Frame或者Panel。
wxPython中预定义的sizerGrid: 最基础的⼆维⽹格布局,可以指定⾏列,每个⽹格的尺⼨都相同。
Flex grid:在Grid的基础上进⾏了改进,⽹格的尺⼨可以不同。
Grid bag:最灵活的⽹格布局器,可以随意放置在⽹格中放置组件。
Box:在⼀条⽔平线或垂直线上进⾏布局,⽹格的尺⼨可以不同,通常⽤于嵌套。
Static box:标准的box sizer,⼀圈环线上可以带有⽂本标题。
使⽤sizer的基本步骤:1. 创建sizer并使⽤SetSizer(sizer)⽅法将它关联到容器。
做完python小程序后总结

做完python小程序后总结Python小程序总结:探索编程的乐趣一、引言编程是一门富有创造力和乐趣的技能。
随着技术的不断进步,越来越多的人开始学习编程,而Python作为一种简单易学且功能强大的编程语言,成为了很多初学者的首选。
在学习Python的过程中,我不仅掌握了基本的语法和编程思维,还通过完成小程序锻炼了自己的实践能力。
本文将总结我在完成Python小程序后的收获和体会。
二、提升编程思维通过完成Python小程序,我深刻体会到了编程思维的重要性。
编程思维是一种解决问题的思维方式,它注重逻辑思维、抽象思维和系统思维。
在编写小程序的过程中,我需要将问题进行拆解,找出其中的规律和逻辑,然后用代码实现解决方案。
这种思维方式的训练,不仅提高了我的解决问题的能力,还培养了我对事物的观察和分析能力。
三、加深对Python语言的理解通过完成Python小程序,我对Python语言的理解更加深入。
Python作为一种面向对象的编程语言,具有简洁明了的语法和丰富的库函数,能够快速高效地实现各种功能。
在编写小程序的过程中,我不断学习和运用Python的各种语法和函数,例如条件语句、循环语句、列表、字典等,进一步巩固了对这些知识点的掌握。
同时,我还学会了如何使用Python的调试工具,帮助我解决程序中的错误和问题。
四、培养团队协作能力完成Python小程序不仅是一个人的事情,还需要与他人进行合作。
在合作的过程中,我学会了与他人进行有效的沟通和协调,共同解决问题。
我们相互交流自己的想法和实现方法,互相借鉴和提出建议,最终得到了更好的解决方案。
通过这样的合作,我不仅学到了更多的知识和技巧,还培养了自己的团队协作能力。
五、提升解决问题的能力编程是一种解决问题的工具,通过完成Python小程序,我不仅提高了自己的编程能力,还培养了解决问题的能力。
在编写小程序的过程中,我需要分析问题、提出解决方案,并将其转化为代码。
通过不断实践和调试,我逐渐掌握了解决问题的方法和技巧。
Python学习知识点整理.docx

Python 知识点整理第一部分算法一、概念算法就是解决问题的方法和步骤,即解题步骤。
二、算法的描述方法(一)自然语言:直接用语言叙述解题步骤。
(二)流程图1.符号圆角矩形开始、结束平行四边形输入、输出直角矩形运算过程(赋值等)菱形判断条件箭头程序的执行方向2. 三大结构的流程图框架( 1)顺序结构( 2)分支结构( 3)循环结构第二部分程一、量1.量名可以包含的字符有:小写字母( a-z),大写字母( A-Z),数字( 0-9),下划( _)注意:不能以数字开!不能使用 Python 保留的关字(彩色)!下划开的名字有特殊含!2.量的数据型和数都可以通运算改。
二、数据型1.布型:表示真假的型,取包含 True 和 False。
2.整型:整数。
(496、5、、95⋯⋯)把量 a 成整数型: a=int(a)3.浮点型:小数或用科学数法表示的数字。
3.14159、5.91、1.0e8(1 乘 10 的 8 次方,也可以写作 100000000.0)把量 a 成浮点型: a=float( a)4.字符串型:字符成的序列。
‘ abcd、’“ abcd、”’’’ abcd ’’’⋯⋯把量 a 成字符串型: a=str( a)三、运算( =)用法:将等式右等式左。
a=7(将 7a)b=a(将 a b)四、常数运算1.加法( +)2.减法( -)3.乘法( * )4.浮点除法( / )5.整数除法( // )6.求余数( %)常用于判断是否能整除:余数为零,即可以整除。
7.幂指数( ** )3 的4 次方:8.开平方import mathmath.sqrt ()括号内为开平方的数值或变量。
9.变量 a 在原有数值上增加 1(a+=1,即 a=a+1)“-=”、“ *=”、“ /=”等运算符号组合的意义同理。
五、字符串运算1.拼接( +)2.复制3.转义符(1)换行符( \n )(2)制表符( \t ):对齐文本( 3)引号(\’或\”):表示单、双引号,在字符串被相同引号包裹时使用4.算字符串度(包含的字符数):len ( )5.提取个字符格式:字符串量后加 [ 偏移量 ]字符串 a 中a b c d⋯⋯q r s t包含的字符偏移量0123⋯⋯16171819(→ )偏移量-20 -19 -18-17 ⋯⋯ -4-3-2-1(← )6.提取子字符串(一部分字符)格式:字符串量后加 [ 起始偏移量:止偏移量:步 ]含:从“起始偏移量”提取到“ 止偏移量” ,每“步”个字符提取一个六、布型数据的运算:判断真假1.关系运算(比运算)比操作符含(判断)==等于!=不等于<小于>大于<=不大于(小于等于)>=不小于(大于等于)in属于2.布运算(运算):and(与),or(或), not (非)以 a=7 例比运算后果运算后果a>5 and a<10true and true trueand(与)a<5 and a<10true and false falsea<5 and a>10false and false falsea>5 or a<10true or true trueor(或)a<5 or a<10true or false truea<5 or a>10false or false truenot (非)not a<10not true false not a>10not false true同一个量做多个 and 比操作,比如: a>5 and a<10 可以写作 5<a<10;可以做更的比,如 5<a<10<99。
python高级编程重点知识总结

python高级编程重点知识总结Python高级编程涵盖了许多关键的概念和技术。
以下是一些重点知识的总结:面向对象编程:Python支持面向对象编程,这包括类(Class)和对象(Object)的概念。
类是对事物的抽象描述,而对象是类的实例。
Python中的类支持封装、继承和多态等特性。
错误和异常处理:Python使用try/except块来处理运行时错误和异常。
这有助于在出现问题时优雅地处理情况,而不是使整个程序崩溃。
模块和包:Python模块允许你逻辑性地组织Python代码。
包是一个包含多个模块的目录,它可以用于代码重用和模块化设计。
装饰器:装饰器是Python中的一个高级功能,允许你修改或增强函数或类的功能,而无需改变其源代码。
迭代器和生成器:迭代器是一个可以记住遍历的位置的对象,生成器是一个用普通函数语法定义的迭代器。
多线程和多进程:Python支持多线程和多进程编程,尽管由于全局解释器锁(GIL)的存在,Python的多线程在CPU密集型任务上可能并不高效。
但是,对于IO密集型任务或者利用多核处理器的多进程编程,Python的多线程和多进程仍然非常有用。
异步IO和协程:Python的asyncio库和协程支持异步IO编程,这对于处理大量并发连接或执行非阻塞IO操作非常有用。
类型注解和类型检查:Python 3.5引入了类型注解,允许你为变量、函数参数和返回值提供类型信息。
虽然Python是一种动态类型语言,但类型注解可以提高代码的可读性和可维护性。
此外,像mypy这样的工具可以进行类型检查,以在运行时之前捕获可能的类型错误。
单元测试和测试驱动开发(TDD):Python的unittest库提供了单元测试的功能,而pytest和nose等第三方库则提供了更多的测试功能。
TDD是一种编程方法,它要求在编写任何功能代码之前先编写测试。
网络编程:Python提供了许多用于网络编程的库,如socket、requests、aiohttp等。
python知识点总结讲义

python知识点总结讲义一、Python 的基础语法Python 的基础语法非常简单,但是功能强大,适合初学者入门。
Python 的语法特点包括:1. 代码块使用缩进来表示,而不是使用大括号。
这使得 Python 的代码更加简洁和易读。
2. 变量不需要提前声明,可以直接赋值使用。
3. Python 支持多种数据类型,包括整数、浮点数、字符串、列表、元组、字典等。
4. Python 支持条件语句(if-else)、循环语句(for、while)、函数定义等常见的控制结构。
5. Python 的函数和模块化设计非常灵活,支持函数的嵌套和递归调用。
二、Python 的核心特性Python 作为一种高级编程语言,具有许多独特的核心特性,使其在软件开发中具有独特的优势。
其中包括以下几点:1. 简单易学:Python 的语法非常简单易懂,适合初学者入门。
对于有其他编程语言基础的人,也很容易上手。
2. 面向对象:Python 是一种面向对象的编程语言,支持类、对象、继承、多态等面向对象的特性。
3. 动态类型:Python 的变量是动态类型的,不需要提前声明变量的类型,可以根据赋值自动推断变量的类型。
4. 强大的标准库:Python 的标准库非常强大,包含了大量的模块和函数,能够满足各种开发需求。
5. 可移植性强:Python 可以在各种操作系统上运行,在 Linux、Windows、Mac 等平台都可以运行。
三、Python 的数据类型和数据结构Python 支持多种数据类型和数据结构,包括整数、浮点数、字符串、列表、元组、字典等。
其中,列表和字典是 Python 中非常重要的数据结构,具有很强的灵活性和适应性。
1. 整数和浮点数:Python 支持整数和浮点数,可以进行整数和浮点数的加减乘除等操作。
2. 字符串:Python 的字符串可以使用单引号、双引号或三引号来表示,支持字符串的切片、拼接、查找、替换等操作。
python图形开发GUI库wxpython使用方法详解

python图形开发GUI库wxpython使⽤⽅法详解⼀、python gui(图形化)模块介绍: Tkinter :是python最简单的图形化模块,总共只有14种组建 Pyqt :是python最复杂也是使⽤最⼴泛的图形化 Wx :是python当中居中的⼀个图形化,学习结构很清晰 Pywin :是python windows 下的模块,摄像头控制(opencv),常⽤于外挂制作⼆、wx模块的安装:C:\Users\Administrator> pip install wxpython三、图形化介绍四、wx主要组件介绍1、frame(窗⼝)参数:parent = None #⽗元素,假如为None,代表顶级窗⼝id = None #组件的标识,唯⼀,假如id为-1代表系统分配idtitle = None #窗⼝组件的名称pos = None #组件的位置,就是组件左上⾓点距离⽗组件或者桌⾯左和上的距离size = None #组件的尺⼨,宽⾼style = None #组件的样式name = None #组件的名称,也是⽤来标识组件的,但是⽤于传值2、TextCtrl(⽂本框)参数:parent = None #⽗元素,假如为None,代表顶级窗⼝id = None #组件的标识,唯⼀,假如id为-1代表系统分配idvalue = None #⽂本框当中的内容GetValue #获取⽂本框的值SetValue #设置⽂本框的值pos = None #组件的位置,就是组件左上⾓点距离⽗组件或者桌⾯左和上的距离size = None #组件的尺⼨,宽⾼style = None #组件的样式validator = None #验证name = None #组件的名称,也是⽤来标识组件的,但是⽤于传值3、Button(按钮)参数:parent = None #⽗元素,假如为None,代表顶级窗⼝id = None #组件的标识,唯⼀,假如id为-1代表系统分配idlable = None #按钮的标签pos = None #组件的位置,就是组件左上⾓点距离⽗组件或者桌⾯左和上的距离size = None #组件的尺⼨,宽⾼style = None #组件的样式validator = None #验证name = None #组件的名称,也是⽤来标识组件的,但是⽤于传值其它组件的参数类似4、创建窗⼝基础代码基本创建窗⼝代码说明:import wx #引⼊wx模块app = wx.App() #实例化⼀个主循环<br>frame = wx.Frame(None) #实例化⼀个窗⼝<br>frame.Show()#调⽤窗⼝展⽰功能<br>app.MainLoop()#启动主循环效果如下图:五、Gui编写简单实例实现如下⼀个GUI界⾯,在上⾯⽂本框中输⼊⽂本⽂件地址,点击“打开”按钮后将⽂本⽂件内容显⽰在下⾯的⽂本框中。
python小程序开发总结 -回复

python小程序开发总结-回复Python小程序开发总结Python是一种功能强大的编程语言,具有语法简洁、易学易用的特点。
其强大的生态系统和广泛的应用领域使得Python成为现代软件开发中的重要工具之一。
而Python小程序开发则是利用Python语言开发出的简单、实用的应用程序。
本文将以Python小程序开发为主题,一步一步回答与之相关的问题。
一、Python小程序开发的概述Python小程序指的是开发出的轻量级应用程序,它通常是用于解决特定问题或提供某种功能的工具。
这些小程序运行快速、占用资源少,具有良好的交互性和用户体验,适合于日常生活中的各种场景。
二、Python小程序的开发环境要进行Python小程序的开发,我们需要在电脑上搭建相应的开发环境。
具体而言,我们需要安装Python解释器和相应的开发工具。
Python解释器负责解释和执行我们编写的Python代码,而开发工具则提供了代码编辑、调试和运行等功能。
1. 安装Python解释器Python解释器是运行Python代码的核心组件。
我们可以从Python官网下载并安装最新版本的Python解释器。
安装完成后,我们就可以在终端或命令提示符中输入python命令,启动Python解释器了。
2. 选择开发工具Python拥有很多优秀的集成开发环境(IDE),包括PyCharm、VS Code、Sublime Text等。
这些IDE提供了丰富的功能,如代码自动补全、代码片段、调试器等,能够提升我们的开发效率。
选择一个适合自己的开发工具,并安装在电脑上。
三、Python小程序的开发步骤Python小程序的开发过程大致可以分为以下几个步骤:需求分析、架构设计、编码实现、测试和部署。
1. 需求分析在开始编码前,我们需要明确小程序的需求。
了解用户的需求是开发出实用的小程序的关键。
通过与用户沟通和了解,明确小程序需要实现的功能和特性,以及用户的使用场景和预期效果。
python图形化界面设计(wxpython)一布局管理

python图形化界面设计(wxpython)一布局管理Python图形化界面设计是通过使用不同的库来创建图形化用户界面,其中wxPython是一个流行的库之一、wxPython是在Python中使用wxWidgets库的绑定,它提供了一套广泛的用户界面控件和布局管理器来创建具有吸引力和交互性的应用程序。
布局管理器是一种用于在用户界面中定位和布置控件的机制。
它们允许开发者以一种灵活的方式定义组件之间的关系,以便根据不同的窗口尺寸和用户需求进行自适应调整。
wxPython提供了三种主要的布局管理器:BoxSizer、GridSizer和FlexGridSizer。
BoxSizer是最简单和最常用的布局管理器之一、它将控件放置在一个水平或垂直的框中,可以自动调整大小和位置。
例如,以下代码创建一个垂直BoxSizer,并在其中添加两个按钮:```pythonimport wxclass MyFrame(wx.Frame):def __init__(self, parent, title):super(.__init__(parent, title=title)panel = wx.Panel(self)sizer = wx.BoxSizer(wx.VERTICAL)button1 = wx.Button(panel, label="Button 1")button2 = wx.Button(panel, label="Button 2")sizer.Add(button1, 0, wx.ALL, 10)sizer.Add(button2, 0, wx.ALL, 10)panel.SetSizer(sizer)self.Showapp = wx.Appframe = MyFrame(None, "BoxSizer Example")app.MainLoop```GridSizer是另一种常用的布局管理器,可以将控件放置在网格中。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
参数4:pos 窗体的位置坐标。默认值为(-1,-1),则窗体的位置由系统决定。 参数5:size 窗体的大小。默认值为(-1,-1),则窗体的大小由系统决定。 参数6:style 窗体样式。默认值为 DEFAULT_FRAME_STYLE 默认样式 DEFAULT_FRAME_STYLE 是下面这些值的复合:
2.基本用法—菜单点击回应
• self.Bind(): 点击事件,将菜单和函数绑定 • self.Bind(wx.EVT_MENU, self.response_open, open) • def response_open(self, event): • print 'open a new file‘
2.基本用法—添加菜单
• • • • • • • • • • • • wx.MuneBar():创建一个菜单栏 wx.Menu():创建菜单 wx.Menu.Append():添加子菜单 wx.MuneBar. Append():添加菜单 self.SetMenuBar( wx.MuneBar()):在程序类中创建菜单栏 添加菜单示例: class MainFrame(wx.Frame): def __init__(self,parent,id): wx.Frame.__init__(self, parent, id, u'添加菜单', size=(800,500), style=wx.DEFAULT_FRAME_STYLE ^ (wx.RESIZE_BORDER | wx.MINIMIZE_BOX | wx.MAXIMIZE_BOX)) self.setmenu()
style = wx.TE_MULTILINE | wx.HSCROLL)#输出文本
2.基本用法—wx.Button、wx. CtrlText
self.Bind(wx.EVT_BUTTON,self.confirm,Button1)#绑定按钮一 self.Bind(wx.EVT_BUTTON,self.clear,Button2)#绑定按钮二 def confirm(self,event):#确定,将输入内容打印到‘contents’上 text=self.textin.GetValue() self.contents.SetValue(text) def clear(self,event):#清除函数 self.contents.SetValue("")
2.基本用法—添加菜单
• def setmenu(self): • menubar=wx.MenuBar()#创建菜单栏 • file=wx.Menu()#创建菜单 • edit=wx.Menu()#创建菜单 • help=wx.Menu()#创建菜单 • open=file.Append(wx.ID_ANY, u'&打开', 'open a file')#添加子菜单 • save=file.Append(wx.ID_ANY, u'&保存')#添加子菜单 • menubar.Append(file, u'&文件')#将菜单添加到菜单栏 • menubar.Append(edit, u'&编辑')#将菜单添加到菜单栏 • menubar.Append(help, u'&帮助')#将菜单添加到菜单栏 • self.SetMenuBar(menubar)#显示名菜单栏
下面是一个简单示例:
2.基本用法——wx.Window
• import wx #app = wx.PySimpleApp()
app = wx.App() frame = wx.Frame( None, -1, '' ) frame.SetToolTip( wx.ToolTip( 'This is a frame' ) ) frame.SetCursor( wx.StockCursor( wx.CURSOR_MAGNIFIER ) ) frame.SetPosition( wx.Point( 0, 0 ) ) frame.SetSize( wx.Size( 300, 250 ) ) frame.SetTitle( 'simple2.py' ) frame.Show() app.MainLoop()
Wxpython用法总结
1.简介
• wxPython是Python语言的一套优秀的GUI图形库,允许Python程序 员很方便的创建完整的、功能健全的GUI用户界面。 wxPython是 作为优秀的跨平台GUI库wxWidgets的Python封装和Python模块的 方式提供给用户的。 • 就如同Python和wxWidgets一样,wxPython也是一款开源软件,并 且具有非常优秀的跨平台能力,能够支持运行在32位windows、 绝大多数的Unix或类Unix系统、Macintosh OS X下。
2.基本用法——wx.Frame
• wx.Frame 是一个容器构件。这意味着它可以容纳其它构件。它有如下的构 造器: wx.Frame( wx.Window parent, id, string title, wx.Point pos=wx.DefaultPosition, wx.Size size=wx.DefaultSize, style = wx.DEFAULT_FRAME_STYEL, string name='frame' )
2.基本用法——wx.Frame
• • • • • • • • • • • • 具体实例: import wx def main(): app = wx.App() frame = wx.Frame(None, -1, u'简单示例', wx.DefaultPosition, size=(800,500), style=wx.DEFAULT_FRAME_STYLE ^ (wx.RESIZE_BORDER | wx.MINIMIZE_BOX | wx.MAXIMIZE_BOX)) frame.Center() frame.Show() app.MainLoop() if __name__=='__main__': main()
2.基本用法—wx.StaFra bibliotekicText• wx.StaticText() :wx.StaticText控件的参数有: parent:父窗口部件。 id:标识符。使用-1可以自动创建一个唯一的标识。 label:你想显示在静态控件中的文本。 pos:一个wx.Point或一个Python元组,它是窗口部件的位置。 size:一个wx.Size或一个Python元组,它是窗口部件的尺寸。 style:样式标记。 name:对象的名字,用于查找的需要。 其中样式style的取值有: wx.ALIGN_CENTER:静态文本位于静态文本控件的中心。 wx.ALIGN_LEFT:文本在窗口部件中左对齐。这是默认的样式。 wx.ALIGN_RIGHT:文本在窗口部件中右对齐。 wx.ST_NO_AUTORESIZE:如果使用了这个样式,那么在使用了SetLabel()改变文本之后,静态 文本控件不将自我调整尺寸。你应结合使用一个居中或右对齐的控件保持对齐。
2.基本用法——wx.Window
• wx.Window 是一个基类,许多构件从它继承。包括wx.Frame 构件。 技术上这意味着,我们可以在所有的子类中使用wx.Window 的方法。我们这 里介绍它的几种方法: * SetTitle( string title ) —— 设置窗口标题。只可用于框架和对话框。 * SetToolTip( wx.ToolTip tip ) —— 为窗口添加提示。 * SetSize( wx.Size size ) —— 设置窗口的尺寸。 * SetPosition( wx.Point pos ) —— 设置窗口出现的位置。 * Show( show = True ) —— 显示或隐藏窗口。其中的参数可以为 True 或False。 * Move( wx.Point pos ) —— 将窗口移动到指定位置。 * SetCursor( wx.StockCursor id ) —— 设置窗口的鼠标指针样式。
2.基本用法——wx.Frame
wx.MINIMIZE_BOX | wx.MAXIMIZE_BOX | wx.RESIZE_BORDER wx.SYSTEM_MENU | wx.CAPTION | wx.CLOSE_BOX | wx.CLIP_CHILDREN |
它包括最小化按钮、最大化按钮、系统菜单、标题栏、关闭按钮、可变大小 等等。您也可以根据自己的需求改变样式,具体请参照帮助。
2.基本用法—wx.BoxSizer
• wx.BoxSizer():可以水平或垂直地摆放部件,参数为wx.VERTICAL或 wx.HORIZONTAL • 往wx.BoxSizer中添加部件是通过Add() 方法完成的 • 方法的参数: Add(wx.Window window, integer proportion=0, integer flag = 0, integer border = 0) • 1、proportion: • proportion参数定义了构件在既定方向上所占空间的比例,是相对的, 相对于其他组件 举个例子:我们有三个按钮,proportion的值分别是0,1,2。三个按 钮被放置到水平方向的sizer当中,Button with proportion 0 will not change at all。但是, Button with proportion 2将会比the one with proportion 1大两倍在水平位置上。
• 参数1:parent • 当前窗口的父窗口,如果当前窗口是top-level window的话,则 parent=None,如果不是顶层窗口,则它的值为所属frame的名字 • 参数2:id • 窗体编号。默认为-1,系统自动给他分配一个编号。