Python的标准GUI:Tkinter的组件,,Label组件:La


Label组件:Label组件用于显示文本和图像,并且使用双重缓冲用法:使用Label组件可以指定想要显示的内容(文本、位图或者图片):
from tkinter import *    master = Tk()  w = Label(master, text="Hello FishC!")  w.pack()   //用于自动调节尺寸  mainloop() //主事件循环 
还可以通过foreground(fg)和background(bg)来设置Label的前景色和背景色Label可以显示多行文本,可以直接使用换行文本符或使用wraplength选项来实现,文本换行时,你可以使用 anchor 和 justify 选项来使得文本如你所希望的显示出来可以使用Label显示PhotoImage和BitmapImage对象(务必保留一份图片对象的引用,以防python的垃圾回收机制回收)Label(master=None,**options)master--父控件**options--组件选项技术分享图片技术分享图片技术分享图片Button控件:Button组件用于实现各种各样的按钮Button组件常常被用于工具栏、应用程序窗口、和表示接受或拒绝的对话框禁用按钮:
b = Button(master, text="Help", state=DISABLED) 
Label的尺寸是正好可以容纳其内容,使用padx和pady选项在Button的内容和边框间添加额外的间距Button可以显示多行文本,你可以直接使用换行符或使用wraplength选项来实现。当文本换行的时候,你可以使用anchor和justify以及padx选项来使得文本如你所希望的显示出来按钮凹下去:将relief选项的默认值RAISED改为SUNKEN b.config(relief=SUNKEN )Button(master=None,**options)master--父控件**options--组件选项技术分享图片技术分享图片技术分享图片方法:flash()--刷新Button组件,该方法将重绘Button组件若干次invoke()--调用Button中command选项指定的函数或方法,并返回函数的返回值--如果Button的状态是DISABLED(不可用)或没有指定command选项,则该方法无效Frame控件Frame组件是屏幕上的一个矩形区域。Frame主要是作为其他组件的框架基础,或为其他组件提供间距填充Frame组件主要用于在复杂的布局中将其他组件分组,也用于填充间距和作为实现高级组件的基类Frame(master=None,**options)master--父控件**options--组件选项技术分享图片技术分享图片Checkbutton组件:Checkbutton(多选按钮)用于实现确定是否选择的按钮Checkbutton组件被用于作为二选一的按钮使用Checkbutton,需要先创建一个Tkinter变量用于存放按钮的状态默认情况,variable选项设置为1表示选中状态,反之设置为0在类中时,最好将variable选项的值作为属性存储Checkbutton(master=None,**options)master--父控件**options--组件选项技术分享图片技术分享图片技术分享图片方法:deselect()--取消Checkbutton组件的选中状态,也就是设置variable为offvalueselect()--将Checkbutton组件设置为选中状态,也就是设置variable为onvalueflash()--刷新Checkbutton组件,该方法将重绘Checkbutton组件若干次Radiobutton组件:Radiobutton(单选按钮)组件用于实现多选一的问题。Radiobutton组件是用于实现多选一的问题,它几乎总是成组使用,其中所有成员公用相同的变量Radiobutton组件跟Checkbutton组件非常相似,为了实现其“单选”行为,确保一组中的所有按钮的variable选项都使用同一个变量,并使用value选项来指定每个按钮代表什么值RadioButton(master=None,**options)master--父控件**options--组件选项技术分享图片技术分享图片技术分享图片LabelFrame组件:LabelFrame组件是Frame组件的变体,默认情况下,LabelFrame会在其子组件的周围绘制一个边框以及一个标题为组件分组,需要先创建一个LabelFrame,然后像往常一样将子组件添加进去。LabelFrame组件会自动绘制一个边框将子组件包围起来,并在它们上方显示一个文本标题LabelFrame(master=None,**options)master--父控件**options--组件选项技术分享图片技术分享图片Entry组件:Entry组件通常用于获取用户输入的文本使用代码为Entry组件添加文本,可以使用insert()方法。如果要替换当前文本,可以先使用delete()方法,再使用insert()方法实现:获取当前输入框的文本可以使用get()方法Entry()(master=None,**options)master--父控件**options--组件选项技术分享图片技术分享图片技术分享图片方法:delete(first,last=None)--删除参数first到last范围内(包含first和last)的所有内容--如果忽略last参数,表示删除first参数指定的选项--使用delete(0,END)实现删除输入框的所有内容get()--获得当前输入框的内容icursor(index)--将光标移动到index参数指定的位置--这同时也会设置INSERT的值index(index)--返回与index参数相应的选项的序号insert(index,text)--将text参数的内容插入到index参数指定的位置--使用insert(INSERT,text)将text参数指定的字符串插入到光标的指定位置--使用insert(END,text)将text参数指定的字符串插入到输入框的末尾Entry组件是支持验证输入内容的合法性的,比如要求输入数字,你输入字母就是非法。实现该功能需要通过设置validate、validateommand和invalidcommand选项。技术分享图片invalidcommand选项指定的函数只有在validatecommand的返回值为False的时候才被调用。Listbox组件:Listbox(列表框)组件用于显示一个选择列表。当你创建一个Listbox组件时,他是空的,所以要先添加一行或多行文本进去。使用insert()方法添加文本,该方法有两个参数:第一个参数是插入的索引号,第二个参数是插入的字符串。索引号通常是项目的序号(0是列表中第一项的序号)Listbox组件根据Selectmode选项提供了四种不同的选择模式:SINGLE(单选)、BROWSE(也是单选,但拖动鼠标或通过方向键可以直接改变选项)、MULTIPLE(多选)和EXTENDED(也是多选,但需要同时按住Shift键或Ctrl键或拖拽鼠标实现)。默认是BROWSE在某个组件上安装垂直滚动条,需要:设置该组件的yscrollbarcommand选项为Scrollbar组件的set()方法;设置Scrollbar组件的command选项为该组件的yview()方法List(master=None,**options)master--父控件**options--组件选项Scrollbar组件:Scrollbar(滚动条)组件用于滚动一些组件的可见范围,根据方向可分为垂直滚动条和水平滚动条为了在某个组件上安装垂直滚动条,你需要做两件事:1.设置该组件的yscrollbarcommand选项为Scrollbar组件的set()方法2.设置Scrollbar组件的command选项为该组件的yview()方法。当Listbox组件的可视范围发生改变时,Listbox组件通过调用set()方法通知Srollbar组件。(当用户操作滚动条时自动调用Listbox组件的yview()方法)Scrollbar (master=None,**options)master--父控件**options--组件选项Scale组件:Scale(刻度)组件看起来像一个带数据的Scrollbar组件。Scale组件允许通过滑动滑块来选择一个范围的数字创建一个指定范围的Scale组件需要制定它的from和to两个选项可以通过resolution选项控制分频率(步长),通过tickinterval选项设置刻度Scale(master=None,**options)master--父控件**options--组件选项Text()组件:Text()组件用于显示和处理多行文本。因为适用于显示纯文本或格式化文本(不同字体,嵌入图片,显示链接,甚至带CSS格式的HTML)常被用于作为简单的文本编辑器和网页浏览器创建一个Text组件的时候,里面没有内容,用insert()方法以及INSERT或END索引号插入内容在Text组件中插入对象,可以使用windows_create()和image_create()方法:windows_create(index,**options)--在index参数指定的位置嵌入一个window对象--支持两种方式在Text组件中嵌入window对象:看下方create选项和window选项的描述--可选项create:设定一个回调函数用于创建嵌入的window组件,该函数没有参数,并且必须创建Text的子组件并返回--可选项window:指定一个已经创建好的window组件,该组件必须是Text组件的子组件image_create(index,cnf={},**kw)--在index参数指定的位置嵌入一个image对象--该image对象必须是Tkinter的PhotoImage或BitmapImage实例删除Text组件中的内容可以使用delete()方法text.delete(1.0,END)Text组件还支持“恢复”和“撤销”操作,通过设置undo选项为True可以开启Text组件的“撤销功能”,然后用edit_undo()方法实现“撤销”操作,用edit_redo()方法实现“恢复”操作默认情况下每一次完整的操作将会放入栈中(Tkinter中每次焦点切换、用户按下Enter键、删除/插入操作的转换等之前的操作算是一次完整的操作)Indexs的用法:Indexs使用来指向Text组件中文本的位置,跟Python的序列索引一样 "line.column"将索引位置的行号和列号以字符串的形式表示出来(中间以"."分隔)"line.end"行号加上字符串".end"的格式表示为该行最后一个字符的位置INSERT对应光标的位置CURRENT对应鼠标坐标最近的位置(知道松开鼠标才响应)END对应Text组件的文本缓冲区的左后一个字符的下一个位置expressions用于修改任何格式的索引,用字符串的形式实现修改所应的表达式技术分享图片Marks用法Marks通常是嵌入到Text组件文本中不可见对象。可以使用tag_config()方法设置Tags样式如果对同一个范围的文本加上多个Tags,并且设置相同的选项,那么新创建爱你的Tag样式会覆盖比较旧的Tag也可以使用tag_raise()tag_lower()方法来控制Tags间的优先级此外Tags还支持事件绑定,使用的是tag_bind()的方法Text(master=None,**options)master--父控件**options--组件选项技术分享图片技术分享图片技术分享图片技术分享图片方法:dump(index1,index2=None,command=None,**kw)--返回index1和index2之间的内容--返回的值是一个由3元祖(关键词,值,索引)组成的列表,关键词参数的顺序为:all,image,mark,tag,text,window--默认关键词是‘all‘,表示全部关键词均为选中状态--如果需要筛选个别关键词,可以用dump(index1,index2,image=True,text=True)这样的形式调用--如果指定了command函数,那么会为列表中的每一个三元组作为参数调用一次该函数Canvas组件:Canvas是一个通用的组件,通常用于显示和编辑图形。可以用来绘制线段、圆形、多边形,甚至是绘制其他组件用法:在Canvas组件上绘制对象,可以用create_xxx()的方法(XXX表示对象类型,例如线段line,矩形rectangle,文本text等)注意,添加到Canvas上的对象会一直保留着。如果想要更改可以使用coords(),itemconfig()和move()方法来移动画布上的对象或者直接用delete()方法来删除 还可以在Canvas上显示文本,使用的是create_text()方法:使用create_oval()方法绘制椭圆形(或圆形),参数是制定一个限定矩形(Tkinter会自动在这个矩形内绘制一个椭圆)绘制多边形,可以使用create_polygon()方法Canvas组件支持对象arc(弧形、弦或扇形)bitmap(内建的位图文件或XBM格式的文件)image(BitmaoImage或PhotoImage的实例对象)line(线)oval(椭圆形)polygon(多边形)rectangle(矩形)其中弦、扇形、椭圆形、圆形和矩形这些封闭式图形都是有轮廓线和填充颜色组成的,但都可以设置为透明画布对象显示的顺序默认情况下新建的画布对象会覆盖旧的画布对象的重叠部分指定画布对象Canvas组件提供了集中方法让你指定画布对象Item handlesTagsALLCURRENTItem handles事实上是一个用于指定某个画布对象的整形数字Tags是负载画布对象上的标签。一个画布对象与多个Tags相关联(Canvas预定义了两个Tags:ALL和CURRENT)ALL表示Canvas组件中的所有画布对象CURRENT表示鼠标下的画布对象方法:create_arc(bbox,**options)--根据bbox(x1,y1,x2,y2)创建一个扇形、弓形或弧形--新创建的画布对象位于显示列表的顶端--创建成功后返回该画布对象的ID--下方表格列举了各个options选项的具体含义技术分享图片技术分享图片Menu组件:Menu组件用于实现顶级菜单、下拉菜单和弹出菜单用法:创建一个顶级菜单、你需要先创建一个菜单实例,然后使用add()方法将命令和其他子菜单添加进去:创建一个下拉菜单方法也一样,但不同的是最后需要添加到主菜单上(而不是窗口上)Menu(master,**options)master--父控件**options--组件选项方法:add(type,**options)--type参数指定添加菜单类型,可以是:"command","cascade","checkbutton","radiobutton"或"separator"--还可以通过options选项设置菜单的属性,下表列举了options可以使用的选项和具体含义add_cascade(**options )--添加一个父菜单add_command(**options)--添加一个普通的命令菜单项add_checkbutton(**options)--添加一个多选按钮的菜单项add_separator(**options)--添加一条分割线MenuButton组件:MenuButton组件是一个与Menu组件相关联的按钮,它可以放在窗口中的任意位置,并且在被按下时弹出下拉菜单用法:创建一个Menubutton组件,并创建一个Menu组件与之相关联OptionMenu(选择菜单)事实上是下拉菜单的改版获得用户选择的内容,使用Tkinter变量的get()方法即可将多个选项加到选择菜单中,现将选项写入一个元祖中,然后将这个元祖传进去星号作为形参的时候是起到"打包的作用",相反,作为实参的时候是起到"解包"的作用通过在形参前加一个星号(*)或两个星号(**)来指定函数可以接受任意数量的实参当参数形如(*args)时,传递给参数的任意个实参会按位置打包成一个元祖(tuple)当参数形如(**args)时,传递给函数的任意个key = value实参会被包装进一个字典(dict)星号(*)作为实参时,表示通过解包参数调用函数:有打包就打包,通过在实参前加一个星号(*)或两个星号(**)来对列表(list)、元祖(tuple)或字典(dict)进行解包事件绑定Event and Bindings:Tkinter提供一个强大的机制可以让你自由地处理时间,对于每个组件可以通过bind()方法将函数或方法绑定到具体的事件上widget.bind(event, handler)当被触发的事件满足该组件你绑定的事件时,Tkinter就会带着时间对象(Event)去调用handler()方法只有当组件获得焦点的时候才能接受键盘时间(Key),用focus_set()获得焦点<Motion>事件捕获鼠标在组件上的运动轨迹事件序列:Tkinter使用一种称为事件序列的机制来允许用户定义事件,用户需要使用bind()方法将具体的时间序列与自定义的方法相绑定。时间序列是以字符串的形式表示的,可以表示一个或多个相关联的事件语法:<modifier-typr-detail>事件序列是包含在尖括号(<...>)中type部分的内容是最重要的,它通常用于描述普通的事件类型,例如鼠标点击或键盘按键点击modifier部分的内容是可选的,它通常用于描述组合键,例如Ctrl+ c,Shift +鼠标左键点击detail部分的内容是可选的,它通常用于描述具体的按键,例如Button-1表示鼠标左键type:技术分享图片技术分享图片ButtonRelease 比 Button 好用,怕用户误点鼠标KeyPress 可简写为Keymodifier:Event对象当Tkinter去回调你定义的函数的时候,都会带着Event对象(作为参数)去调用技术分享图片Message组件Message组件是Label组件变体,用于显示多汗文本消息。Message组件能够自动换行,并调整文本的尺寸使其适应给定的尺寸Spinbox组件:Spinbox组件是Entry组件的变体,用于从一些固定的值中选取一个和Entry组件的区别是使用Spinbox组件可以用过范围或者元组指定允许用户输入的内容PanedWindow组件PanedWindow组件是一个控件管理组件。跟Frame组件累次,都是为组件提供一个框架当需要提供一个可供用户调整的多空间框架的时候,可以使用PanedWindow组件。PanedWindow组件会为每一个子组件生成一个独立地窗格,用户可以自由调整窗格的大小窗格设置分割线使用sashreliefTopLevel组件:Toplevel组件通常用在显示额外的窗口、对话框和其他弹出窗口上pack、grid和place均用于管理同在一个父组件下的所有组件的布局,其中:pack是按添加顺序排列组件grid是按行/列形式排列组件place则允许程序员指定组件的大小和位置对比grid管理器,pack更适用于少量组件的排列,但它在使用上更加简单(.pack())。如果需要创建相对复杂的布局结构,那么建议是使用多个框架结构构成,或者使用grid管理器实现

Python的标准GUI:Tkinter的组件

评论关闭