python怎样做界面

作为Pyhon的开发者,你迟早会遇到图形用户界面(GUI)应用开发任务,此时我们需要一些界面库来帮助我们快速构建界面,python有很多界面库,以下是一些常用的界面库。
1.tkinter
Tkinter(又称TK接口)是TK图形用户界面工具包的标准Python接口。TK是一个轻量级的跨平台图形用户界面(GUI)开发工具。Tk和Tkinter可以在大多数Unix平台上运行,Windows、还有Macintosh系统。
Tkinter 由一定数量的模块组成。Tkinter位于一个名称_tkinter二进制模块中(较早版本称为tkinter) 。Tkinter包含对TK的低 应用程序级程序员不会直接使用级接口模块。它通常是一个共享库(或DLL),但在某些情况下,它也被python解释器静态链接。
2.pyqt
PyQt是Qt库的Python版本。PyQt3支持Qt1到Qt3。 PyQT4支持QT4。它的第一次发布也是在1998年,但当时叫它 PyKDE,因为SIP和PyQT一开始并没有分开。PyQT是用SIP写的。PyQt 提供 GPL版和商业版。
3.wxpython
wxPython 是 Python 一套优秀的语言 GUI 图形库,允许 Python 程序员很容易创建完整的功能键,完整的功能键 GUI 用户界面。 wxPython 作为一个优秀的跨平台 GUI 库 wxWidgets 的 Python 封装和 Python 为用户提供模块的方式。
就像Python和wxwidgets一样,wxpython也是一款具有优秀跨平台能力的开源软件,可以在32位windows中运行、绝大多数Unix或类Unix系统,Macintosh OS X上。
4.Kivy
基于Opengl,这是一个非常有趣的项目 ES 2.Kivy作为事件驱动的框架,非常适合游戏开发,非常适合处理从widgets到动画的任务。如果你想开发一个跨平台的图形应用程序,或者只需要一个强大的跨平台图形用户开发框架,Kivy是一个不错的选择。
5.pygame
Pygame是专门为电子游戏设计的跨平台Python模块,包括图像和声音。基于SDL,实时电子游戏可以在不受低级语言(如机器语言和汇编语言)约束的情况下开发。
这个库是用来写游戏的,但也可以用来写界面。
至于个人喜好选择什么库,强烈推荐Tkinter,下面给大家介绍一下:
让我们来看看Tkinter中的基本控件:

您需要在下一个代码解释中导入这些代码
fromtkinterimport* fromtkinter.tiximportTk,Control,ComboBox#组合控件包升级 fromtkinter.messageboximportshowinfo,showwarning,showerror#各种类型的提示框
在绘制界面之前,您需要初始化TK()
root=Tk()#初始化TK())
root是你布局的根节点,以后的布局都在上面
root.title("hellotkinter")#设置窗口标题
root.geometry("800x1000")#设置窗口尺寸注意事项:是X还是X?*
root.resizable(width=True,height=True)#设置窗口是否能改变长/宽,False不能改变,True可以改变,默认为True
root.tk.eval('packagerequireTix')#引入升级包,使用升级组合控件设置一些窗口属性
1.Label
让我们来看看Label。它有很多属性
activebackground,activeforeground,anchor, background,bitmap,borderwidth,cursor, disabledforeground,font,foreground, highlightbackground,highlightcolor, highlightthickness,image,justify, padx,pady,relief,takefocus,text, textvariable,underline,wraplength height,state,width
太多了,功能和名字基本一样。这里就不一一说了。你可以自己试试。我来谈谈常用的属性。
lable=Label(root,text="label",bg="pink",bd=10,font=("Arial",12),width=8,height=3)
lable.pack(side=LEFT)
最后,您需要调用pack()来布置控件,您可以指定布局方法,并且有许多可定义的属性。
#Booleans NO=FALSE=OFF=0 YES=TRUE=ON=1 #-anchorand-sticky N='n' S='s' W='w' E='e' NW='nw' SW='sw' NE='ne' SE='se' NS='ns' EW='ew' NSEW='nsew' CENTER='center' #-fill NONE='none' X='x' Y='y' BOTH='both' #-side LEFT='left' TOP='top' RIGHT='right' BOTTOM='bottom' #-relief RAISED='raised' SUNKEN='sunken' FLAT='flat' RIDGE='ridge' GROOVE='groove' SOLID='solid' #-orient HORIZONTAL='horizontal' VERTICAL='vertical' #-tabs NUMERIC='numeric' #-wrap CHAR='char' WORD='word' #-align BASELINE='baseline' #-bordermode INSIDE='inside' OUTSIDE='outside' #Specialtags,marksandinsertpositions SEL='sel' SEL_FIRST='sel.first' SEL_LAST='sel.last' END='end' INSERT='insert' CURRENT='current' ANCHOR='anchor' ALL='all'#e.g.Canvas.delete(ALL) #Textwidgetandbuttonstates NORMAL='normal' DISABLED='disabled' ACTIVE='active' #Canvasstate HIDDEN='hidden' #Menuitemtypes CASCADE='cascade' CHECKBUTTON='checkbutton' COMMAND='command' RADIOBUTTON='radiobutton' SEPARATOR='separator' #Selectionmodesforlistboxes SINGLE='single' BROWSE='browse' MULTIPLE='multiple' EXTENDED='extended' #Activestyleforlistboxes #NONE='none'isalsovalid DOTBOX='dotbox' UNDERLINE='underline' #Variouscanvasstyles PIESLICE='pieslice' CHORD='chord' ARC='arc' FIRST='first' LAST='last' BUTT='butt' PROJECTING='projecting' ROUND='round' BEVEL='bevel' MITER='miter' #Argumentstoxview/yview MOVETO='moveto' SCROLL='scroll' UNITS='units' PAGES='pages'
写完这些操作程序后,你发现界面仍然无法出现,因为你仍然失去了一句话
root.mainloop()
此外,这句话使程序进入消息循环,界面将显示
学习label后,学习其他控件要简单得多,因为许多属性是相同的
2.Button
button=Button(root,text='QUIT',command=root.quit,activeforeground="black",activebackground='blue',bg='red',fg='white') button.pack(fill=Y,expand=1)
如果之前提到的属性没有特殊情况,就不再说了。


3.Scale
defresize(ev=None): lable.config(font='Helvetica-%dbold'%scale.get()) scale=Scale(root,from_=10,to=40,orient=HORIZONTAL,command=resize) scale.set(12) scale.pack()
与button不同的是,command不再点击事件,而是拖动事件 ,调用set()的方法可以设置当前位置

![]()
4.NumbericUpDown
ct=Control(root,label='Number:',integer=True,max=12,min=2,value=2,step=2) ct.label.config(font='Helvetica14bold) ct.pack()

这是一个数字选择框 字体配置需要config()来配置
![]()
5.ComboBox
cb=ComboBox(root,label='Type:',editable=True)
foranimalin('dog','cat','hamster','python'):
cb.insert(END,animal)
cb.pack()这是一个下拉选择框,label前要显示的单词,editable控制是否可以更改
在下拉选择框中调用insert()添加选项

6.Menu
defclick():
print("点击了一次")
menubar=Menu(root)
root.config(menu=menubar)
filemenu=Menu(menubar,tearoff=0)
menubar.add_cascade(label='文件',menu=filemenu)
filemenu.add_command(label='新建...',command=click())
filemenu.add_command(label='打开...',command=click())
filemenu.add_command(label='保存',command=click())
filemenu.add_command(label='关闭填写',command=root.quit)惨淡的蓝色需要依附的节点配置menu才能工作
调用add_cascade为menu添加选项
调用add_command为外层选项添加子选项

7.Frame
frame1=Frame(root) frame1.pack(fill=X) lable1=Label(frame1,text='您的花名:') lable1.grid(row=1,column=0)
frame相当于局部窗体,可用于装载其他控件
使用grid可以让你更容易掌握控件的位置,你可以指定它是否出现在几行,是否跨行,跨行等等。
![]()
8.Radiobutton
frame2=Frame(root) frame2.pack(fill=X) lable2=Label(frame2,text='性别:') lable2.grid(row=1,column=0) sex=StringVar() sex_male=Radiobutton(frame2,text='男',fg='blue',variable=sex,value='男') sex_male.grid(row=1,column=2) sex_female=Radiobutton(frame2,text='女',fg='red',variable=sex,value='女') sex_female.grid(row=1,column=4)
这是一个单选框,其属性以前也说过
![]()
9.ListBox
frame4=Frame(root) frame4.pack(fill=X) lable4=Label(frame4,text='4、请删除你不会变成语言的内容:') lable4.grid(row=1,column=0) listbox=Listbox(frame4) listbox.grid(row=1,column=1) foritemin["C","C++","JAVA","PYTHON","R","SQL","JS"]: listbox.insert(END,item) DELETE=Button(frame4,text="删除",command=lambdalistbox=listbox:listbox.delete(ANCHOR)) DELETE.grid(row=1,column=2) language=Button(frame4,text="确定") language.grid(row=2,column=1)
这是一个列表,请注意,这里的按钮点击事件是用lambda表达式编写的。

10.Canvas
canvas=Canvas(window,width=200,height=100,bg="White") canvas.pack()
这是一块画板,你可以在上面画出各种各样的形状,上面的例子:
fromtkinterimport*
classCanvasDemo:
def__init__(self):
window=Tk()
window.title("CanvasDemo")
self.canvas=Canvas(window,width=200,height=100,bg="White")
self.canvas.pack()
frame=Frame(window)
frame.pack()
btRectangle=Button(frame,text="长方形",command=self.displayRect)
btOval=Button(frame,text="椭圆",command=self.displayOval)
btArc=Button(frame,text="圆弧",command=self.displayArc)
btPolygon=Button(frame,text="多边形",command=self.displayPolygon)
btLine=Button(frame,text="线",command=self.displayLine)
btString=Button(frame,text="文字",command=self.displayString)
btClear=Button(frame,text="清空",command=self.clearCanvas)
btRectangle.grid(row=1,column=1)
btOval.grid(row=1,column=2)
btArc.grid(row=1,column=3)
btPolygon.grid(row=1,column=4)
btLine.grid(row=1,column=5)
btString.grid(row=1,column=6)
btClear.grid(row=1,column=7)
window.mainloop()
defdisplayRect(self):
self.canvas.create_rectangle(10,10,190,90,tags="rect")
defdisplayOval(self):
self.canvas.create_oval(10,10,190,90,tags="oval",fill="red")
defdisplayArc(self):
self.canvas.create_arc(10,10,190,90,start=-90,extent=90,width=5,
fill="red",tags="arc")
defdisplayPolygon(self):
self.canvas.create_polygon(10、10、190、90、30、50tags="polygon")
defdisplayLine(self):
self.canvas.create_line(10,10,190,90,fill='red',tags="line")
self.canvas.create_line(10,90,190,10,width=9,arrow="last",activefill="blue",
tags="line")
defdisplayString(self):
self.canvas.create_text(60,40,text="Hi,iamastring",font="10boldunerline10boline",
tags="string")
defclearCanvas(self):
self.canvas.delete("rect","oval","arc","polygon","line","string")
CanvasDemo()
11.CheckButton
frame8=Frame(root) frame8.pack() agree=StringVar() agree=Checkbutton(frame8,text='我同意',variable=agree,onvalue='确定',offvalue="不确定",) agree.grid()
这是一个多选框,oncalue代表被勾选时的值,offvalue代表不被勾选时的值。
![]()
12.LabelFrame
frame10=Frame(root) frame10.pack() group=LabelFrame(frame10,text='特别感谢',padx=5,pady=5) group.grid() w=Label(group,text='容器框') w.pack()
这是一个容器框,padx,pady分别控制在x和y方向的外边距。

python学习网,免费在线学习python平台,欢迎关注!
