当前位置: 首页 > 图灵资讯 > 行业资讯> python怎样做界面

python怎样做界面

发布时间:2025-04-06 15:35:50

作为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中的基本控件:

b46578f3b05c9c7df69913769ede5bd.png

您需要在下一个代码解释中导入这些代码

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)

e8c91d33473a93fd3f0758ba107f26e.png

最后,您需要调用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)

如果之前提到的属性没有特殊情况,就不再说了。

e1a30c035d777839b77216fec4be9d6.png

30c08f03d2e8a99a5e1a201e010a55e.png

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()的方法可以设置当前位置

fa816b29cc87218ada360b60faa3132.png

cdde9dd27efa38251f5f747b9ecccb8.png

4.NumbericUpDown

ct=Control(root,label='Number:',integer=True,max=12,min=2,value=2,step=2)
ct.label.config(font='Helvetica14bold&#;)
ct.pack()

916c48162e0d00258b02f467d5f78e7.png

这是一个数字选择框 字体配置需要config()来配置

ec23fb54565975970a07c9f22bc46e3.png

5.ComboBox

cb=ComboBox(root,label='Type:',editable=True)
foranimalin('dog','cat','hamster','python'):
cb.insert(END,animal)
cb.pack()

这是一个下拉选择框,label前要显示的单词,editable控制是否可以更改

在下拉选择框中调用insert()添加选项

33f839c1462b02faa8c7d726d2240af.png

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为外层选项添加子选项

f40adf2dcf9426acccec383e9.png"

7.Frame

frame1=Frame(root)
frame1.pack(fill=X)
lable1=Label(frame1,text='您的花名:')
lable1.grid(row=1,column=0)

frame相当于局部窗体,可用于装载其他控件

使用grid可以让你更容易掌握控件的位置,你可以指定它是否出现在几行,是否跨行,跨行等等。

f93e68f5af4fe092f8c5c6eafe7e755.png

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)

这是一个单选框,其属性以前也说过

5d00c099063e05342e6bd55a711e042.png

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表达式编写的。

b0aa117b673acc60a0acb7e1929bb90.png

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()

8c475ea55474c1d6225dc90e7f53ac0.png

11.CheckButton

frame8=Frame(root)
frame8.pack()
agree=StringVar()
agree=Checkbutton(frame8,text='我同意',variable=agree,onvalue='确定',offvalue="不确定",)
agree.grid()

这是一个多选框,oncalue代表被勾选时的值,offvalue代表不被勾选时的值。

df65d660bc66955e635dd362085c8ea.png

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方向的外边距。

724118f474447f690e02ffad4441b54.png

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

相关文章

如何让vim支持python3

如何让vim支持python3

2025-09-12
python2.7和3.6区别有哪些

python2.7和3.6区别有哪些

2025-09-12
python3有serial库吗

python3有serial库吗

2025-09-12
python中w、r表示什么意思

python中w、r表示什么意思

2025-09-12
python中如何把list变成字符串

python中如何把list变成字符串

2025-09-12
python命名空间是什么

python命名空间是什么

2025-09-12