Python为开发图形用户界面(GUI)提供了多种选择。下面列出了最重要的功能:TkinterTkinter是Python附带的TkGUI工具包的Python接口。本文将以Tkinter为例进行介绍。wxPython这是wxWidgetsGUI工具包的开源Python接口。可以在https:www。tutorialspoint。comwxpythonindex。htm找到有关WxPython的完整教程。PyQt这也是流行的跨平台QtGUI库的Python接口。TutorialsPoint在https:www。tutorialspoint。compyqtindex。htm提供了关于PyQt的非常好的教程。JPythonJPython是Java的Python端口,它使Python脚本可以无缝访问本地机器http:www。jython。org上的Java类库。 当然网上还有很多其他的界面开发框架,可以根据需要进行选择。Tkinter编程 Tkinter是Python的标准GUI库。Python与Tkinter结合提供了一种快速简便的方法来创建GUI应用程序。Tkinter为TkGUI工具包提供了一个强大的面向对象的接口。 使用Tkinter创建GUI应用程序是一项简单的任务。按以下步骤即可:ImportTkinter模块。创建GUI应用程序主窗口。向GUI应用程序添加一个或多个上述小部件。进入主事件循环,对用户触发的每个事件采取行动。 例如:importtkinter导入tkintertoptkinter。Tk()添加一个或多个上述小部件。。。top。mainloop() 运行结果: Tkinter小部件 Tkinter提供了各种控件,例如用于GUI应用程序的按钮、标签和文本框。这些控件通常称为小部件。 Tkinter中提供了十多种各类型的小部件:ButtonButton小部件用于显示应用程序中的按钮。CanvasCanvas小部件用于在您的应用程序中绘制形状,例如直线、椭圆、多边形和矩形。CheckbuttonCheckbutton小部件用于将许多选项显示为复选框。用户可以一次选择多个选项。EntryEntry小部件用于显示单行文本字段以接受来自用户的值。FrameFrame小部件用作容器小部件来组织其他小部件。LabelLabel小部件用于为其他小部件提供单行标题。它还可以包含图像。Listbox列表框小部件用于向用户提供选项列表。MenubuttonMenubutton小部件用于在您的应用程序中显示菜单。MenuMenu小部件用于向用户提供各种命令。这些命令包含在Menubutton中。MessageMessage小部件用于显示多行文本字段以接受来自用户的值。RadiobuttonRadiobutton小部件用于将多个选项显示为单选按钮。用户一次只能选择一个选项。ScaleScale小部件用于提供滑块小部件。ScrollbarScrollbar小部件用于向各种小部件(例如列表框)添加滚动功能。ToplevelToplevel小部件用于提供单独的窗口容器。SpinboxSpinbox小部件是标准TkinterEntry小部件的变体,可用于从固定数量的值中进行选择。PanedWindowPanedWindow是一个容器小部件,可以包含任意数量的窗格,水平或垂直排列。labelframelabelframe是一个简单的容器小部件。它的主要目的是充当复杂窗口布局的垫片或容器。tkMessageBox该模块用于在应用程序中显示消息框。标准属性 小部件的一些共同属性,例如大小、颜色和字体:Dimensions方面Colors颜色Fonts字体Anchors锚点Reliefstyles浮雕样式Bitmaps位图Cursors光标几何管理 所有Tkinter小部件都可以访问特定的几何管理方法,这些方法的目的是在整个父小部件区域组织小部件。Tkinter公开了以下几何管理器类:pack、grid和place。pack()方法此几何管理器在将小部件放入父小部件之前将它们组织成块。grid()方法此几何管理器在父小部件中以类似表的结构组织小部件。place()方法此几何管理器通过将小部件放置在父小部件中的特定位置来组织小部件。 例如,显示列表:fromtkinterimportrootTk()创建窗口对象的背景色创建两个列表li〔python,php,C,SQL,java〕movie〔CSS,jQuery,React〕listbListbox(root)创建两个列表组件listb2Listbox(root)foriteminli:第一个小部件插入数据listb。insert(0,item)foriteminmovie:第二个小部件插入数据listb2。insert(0,item)listb。pack()将小部件放置到主窗口中listb2。pack()root。mainloop()进入消息循环 运行结果: 例如,按钮点击计数器:fromtkinterimport事件函数,evt是事件对象defonbutton(evt):counter。set(counter。get()1)创建一个窗体rootTk()root。title(按钮点击计数器)root。geometry(320x160)counterIntVar()创建一个整型变量对象counter。set(0)置其初值为0labelLabel(root,textvariablecounter,font(ArialBold,50))将Label和整型变量对象关联label。pack(sideleft,expandyes,fillboth,padx5,pady5)btnButton(root,text点击加1,bg90F0F0)btn。pack(sideright,anchorcenter,filly,padx5,pady5)btn。bind(Button1,onbutton)绑定事件和事件函数进入消息事件循环root。mainloop()fromtkinterimportdefclickbutton():事件函数root。destroy()调用root的析构函数 运行结果: 例如,简易计算器:fromtkinterimportresetTruedefbuttonCallBack(event):globallabelglobalresetnumevent。widget〔text〕ifnumC:label〔text〕0returnifnumin:label〔text〕str(eval(label〔text〕))resetTruereturnslabel〔text〕ifs0orresetTrue:sresetFalselabel〔text〕snum主窗口rootTk()root。wmtitle(简易计算器)显示栏1labelLabel(root,text0,backgroundlightgray,anchore)label〔width〕35label〔height〕2label。grid(row1,columnspan4,stickyW)按钮showText7894561230。Cforiinrange(4):forjinrange(4):bButton(root,textshowText〔i4j〕,width7)b。grid(rowi2,columnj)b。bind(Button1,buttonCallBack)showText()foriinrange(2):bButton(root,textshowText〔i〕,width7)b。grid(row6,column2i)b。bind(Button1,buttonCallBack)bButton(root,text)b。grid(row6,columnspan2,stickywe)b。bind(Button1,buttonCallBack)root。mainloop() 运行结果: