這篇文章將為大家詳細(xì)講解有關(guān)python做界面的方法,小編覺(jué)得挺實(shí)用的,因此分享給大家做個(gè)參考,希望大家閱讀完這篇文章后可以有所收獲。
成都創(chuàng)新互聯(lián)-成都網(wǎng)站建設(shè)公司,專注成都網(wǎng)站設(shè)計(jì)、網(wǎng)站建設(shè)、網(wǎng)站營(yíng)銷推廣,域名注冊(cè),雅安服務(wù)器托管,網(wǎng)站托管、服務(wù)器租用有關(guān)企業(yè)網(wǎng)站制作方案、改版、費(fèi)用等問(wèn)題,請(qǐng)聯(lián)系成都創(chuàng)新互聯(lián)。
作為Pyhon開(kāi)發(fā)者,你遲早都會(huì)碰到圖形用戶界面(GUI)應(yīng)用開(kāi)發(fā)任務(wù),這時(shí)候我們就需要一些界面庫(kù)來(lái)幫助我們快速搭建界面,python的界面庫(kù)很多,下面給大家介紹幾種常用的界面庫(kù)。
1.tkinter
Tkinter(也叫Tk接口)是Tk圖形用戶界面工具包標(biāo)準(zhǔn)的Python接口。Tk是一個(gè)輕量級(jí)的跨平臺(tái)圖形用戶界面(GUI)開(kāi)發(fā)工具。Tk和Tkinter可以運(yùn)行在大多數(shù)的Unix平臺(tái)、Windows、和Macintosh系統(tǒng)。
Tkinter 由一定數(shù)量的模塊組成。Tkinter位于一個(gè)名為_(kāi)tkinter(較早的版本名為tkinter)的二進(jìn)制模塊中 。Tkinter包含了對(duì)Tk的低 級(jí)接口模塊,低級(jí)接口并不會(huì)被應(yīng)用級(jí)程序員直接使用,通常是一個(gè)共享庫(kù)(或DLL),但是在一些情況下它也被Python解釋器靜態(tài)鏈接。
2.pyqt
PyQt是Qt庫(kù)的Python版本。PyQt3支持Qt1到Qt3。 PyQt4支持Qt4。它的首次發(fā)布也是在1998年,但是當(dāng)時(shí)它叫 PyKDE,因?yàn)殚_(kāi)始的時(shí)候SIP和PyQt沒(méi)有分開(kāi)。PyQt是用SIP寫的。PyQt 提供 GPL版和商業(yè)版。
3.wxpython
wxPython 是 Python 語(yǔ)言的一套優(yōu)秀的 GUI 圖形庫(kù),允許 Python 程序員很方便的創(chuàng)建完整的、功能鍵全的 GUI 用戶界面。 wxPython 是作為優(yōu)秀的跨平臺(tái) GUI 庫(kù) wxWidgets 的 Python 封裝和 Python 模塊的方式提供給用戶的。
就如同Python和wxWidgets一樣,wxPython也是一款開(kāi)源軟件,并且具有非常優(yōu)秀的跨平臺(tái)能力,能夠運(yùn)行在32位windows、絕大多數(shù)的Unix或類Unix系統(tǒng)、Macintosh OS X上。
4.Kivy
這是一個(gè)非常有趣的項(xiàng)目,基于OpenGL ES 2,支持Android和iOS平臺(tái)的原生多點(diǎn)觸摸,作為事件驅(qū)動(dòng)的框架,Kivy非常適合游戲開(kāi)發(fā),非常適合處理從widgets到動(dòng)畫的任務(wù)。如果你想開(kāi)發(fā)跨平臺(tái)的圖形應(yīng)用,或者僅僅是需要一個(gè)強(qiáng)大的跨平臺(tái)圖形用戶開(kāi)發(fā)框架,Kivy都是不錯(cuò)的選擇。
5.pygame
Pygame是跨平臺(tái)Python模塊,專為電子游戲設(shè)計(jì),包含圖像、聲音。建立在SDL基礎(chǔ)上,允許實(shí)時(shí)電子游戲研發(fā)而無(wú)需被低級(jí)語(yǔ)言(如機(jī)器語(yǔ)言和匯編語(yǔ)言)束縛。
這個(gè)庫(kù)使用來(lái)寫游戲的,但是你也可以用來(lái)寫界面。
至于選擇什么庫(kù)是個(gè)人的喜好,強(qiáng)烈推薦Tkinter,下面給大家介紹一下:
先來(lái)看看Tkinter里面的基礎(chǔ)控件:
接下來(lái)的代碼講解中你需要導(dǎo)入這些
from tkinter import * from tkinter.tix import Tk, Control, ComboBox #升級(jí)的組合控件包 from tkinter.messagebox import showinfo, showwarning, showerror #各種類型的提示框
在進(jìn)行界面繪制之前你需要初始化Tk()
root = Tk() # 初始化Tk()
root便是你布局的根節(jié)點(diǎn)了,以后的布局都在它之上
root.title("hello tkinter") # 設(shè)置窗口標(biāo)題 root.geometry("800x1000") # 設(shè)置窗口大小 注意:是x 不是* root.resizable(width=True, height=True) # 設(shè)置窗口是否可以變化長(zhǎng)/寬,F(xiàn)alse不可變,True可變,默認(rèn)為True root.tk.eval('package require Tix') #引入升級(jí)包,這樣才能使用升級(jí)的組合控件
設(shè)置一些窗口屬性
1.Label
再來(lái)看看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
太多了,作用基本和名字一樣,這里就不一一說(shuō)了,你可以自己去試試,我說(shuō)一下常用的屬性
lable = Label(root, text="label", bg="pink",bd=10, font=("Arial",12), width=8, height=3) lable.pack(side=LEFT)
最后你需要調(diào)用pack()來(lái)把控件布置上去,你可以指定布局方式,可定義的屬性也非常多。
# Booleans NO=FALSE=OFF=0 YES=TRUE=ON=1 # -anchor and -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' # Special tags, marks and insert positions 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) # Text widget and button states NORMAL='normal' DISABLED='disabled' ACTIVE='active' # Canvas state HIDDEN='hidden' # Menu item types CASCADE='cascade' CHECKBUTTON='checkbutton' COMMAND='command' RADIOBUTTON='radiobutton' SEPARATOR='separator' # Selection modes for list boxes SINGLE='single' BROWSE='browse' MULTIPLE='multiple' EXTENDED='extended' # Activestyle for list boxes # NONE='none' is also valid DOTBOX='dotbox' UNDERLINE='underline' # Various canvas styles PIESLICE='pieslice' CHORD='chord' ARC='arc' FIRST='first' LAST='last' BUTT='butt' PROJECTING='projecting' ROUND='round' BEVEL='bevel' MITER='miter' # Arguments to xview/yview MOVETO='moveto' SCROLL='scroll' UNITS='units' PAGES='pages'
寫完這些你運(yùn)行程序發(fā)現(xiàn)還是無(wú)法出現(xiàn)界面,那是因?yàn)槟氵€少了一句
root.mainloop()
加上這句話使程序進(jìn)入消息循環(huán),界面便會(huì)顯示出來(lái)
學(xué)完了label之后學(xué)其他控件也就簡(jiǎn)單了很多,因?yàn)楹芏鄬傩远际窍嗤?/p>
2.Button
button=Button(root,text='QUIT',command=root.quit,activeforeground="black",activebackground='blue',bg='red',fg='white') button.pack(fill=Y,expand=1)
之前說(shuō)過(guò)的屬性如果沒(méi)有特殊情況就不再說(shuō)了
3.Scale
def resize(ev=None): lable.config(font='Helvetica -%d bold'%scale.get()) scale=Scale(root,from_=10,to=40,orient=HORIZONTAL,command=resize) scale.set(12) scale.pack()
和button不同的是command不再是點(diǎn)擊事件了而是拖動(dòng)事件 ,調(diào)用set()方法可以設(shè)置當(dāng)前位置
4.NumbericUpDown
ct=Control(root,label='Number:',integer=True,max=12,min=2,value=2,step=2) ct.label.config(font='Helvetica 14 bold') ct.pack()
這是一個(gè)數(shù)字選擇框 其中的字體配置需要使用config()方法來(lái)進(jìn)行配置
5.ComboBox
cb=ComboBox(root,label='Type:',editable=True) for animal in ('dog','cat','hamster','python'): cb.insert(END,animal) cb.pack()
這是一個(gè)下拉選擇框,label前面要顯示的字,editable控制是否可更改
調(diào)用insert()給下拉選擇框添加選項(xiàng)
6.Menu
def click(): print("點(diǎn)擊了一次") 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='打開(kāi)...',command=click()) filemenu.add_command(label='保存',command=click()) filemenu.add_command(label='關(guān)閉填寫',command=root.quit)
慘淡藍(lán)需要所依附的節(jié)點(diǎn)配置menu才能起作用
調(diào)用add_cascade給menu添加一項(xiàng)選項(xiàng)
調(diào)用add_command則是給外層的選項(xiàng)添加一個(gè)子選項(xiàng)
7.Frame
frame1 =Frame(root) frame1.pack(fill=X) lable1=Label(frame1,text='您的花名: ') lable1.grid(row=1,column=0)
frame相當(dāng)于一個(gè)局部的窗體,可以用來(lái)裝載其它控件
使用grid能讓你更容易把握控件的位置,你可以指定它出現(xiàn)在幾行幾列,是否跨行跨列,跨幾行等等。
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)
這是一個(gè)單選框,里面的屬性之前也說(shuō)過(guò)
9.ListBox
frame4 =Frame(root) frame4.pack(fill=X) lable4=Label(frame4,text='4、請(qǐng)刪除您不會(huì)的變成語(yǔ)言: ') lable4.grid(row=1,column=0) listbox=Listbox(frame4) listbox.grid(row=1,column=1) for item in ["C","C++","JAVA","PYTHON","R","SQL","JS"]: listbox.insert(END,item) DELETE=Button(frame4,text="刪除",command=lambda listbox=listbox:listbox.delete(ANCHOR)) DELETE.grid(row=1,column=2) language=Button(frame4,text="確定") language.grid(row=2,column=1)
這是一個(gè)列表,注意這里按鈕點(diǎn)擊事件的寫法是用lambda表達(dá)式寫的。
10.Canvas
canvas = Canvas(window, width = 200, height = 100, bg = "White") canvas.pack()
這是一個(gè)畫板,你可以在上面畫各種形狀,上例子:
from tkinter import * class CanvasDemo: 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 = "長(zhǎng)方形", 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() def displayRect(self): self.canvas.create_rectangle(10, 10, 190, 90, tags = "rect") def displayOval(self): self.canvas.create_oval(10, 10, 190, 90, tags = "oval", fill = "red") def displayArc(self): self.canvas.create_arc(10, 10, 190, 90, start = -90, extent = 90, width = 5, fill = "red", tags = "arc") def displayPolygon(self): self.canvas.create_polygon(10, 10, 190, 90, 30, 50, tags = "polygon") def displayLine(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") def displayString(self): self.canvas.create_text(60, 40, text = "Hi,i am a string",font = "Tine 10 bold underline", tags = "string") def clearCanvas(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()
這是一個(gè)多選框,oncalue代表被勾選時(shí)的值,offvalue代表不被勾選時(shí)的值。
12.LabelFrame
frame10=Frame(root) frame10.pack() group=LabelFrame(frame10,text='特別鳴謝',padx=5,pady=5) group.grid() w=Label(group,text='容器框') w.pack()
這是個(gè)容器框,padx,pady分別控制在x,y方向上的外邊距。
關(guān)于python做界面的方法就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,可以學(xué)到更多知識(shí)。如果覺(jué)得文章不錯(cuò),可以把它分享出去讓更多的人看到。
新聞標(biāo)題:python做界面的方法
本文URL:http://jinyejixie.com/article18/jpdggp.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供App開(kāi)發(fā)、App設(shè)計(jì)、網(wǎng)站建設(shè)、關(guān)鍵詞優(yōu)化、域名注冊(cè)、企業(yè)網(wǎng)站制作
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)