Python提供了多種開發(fā)GUI(圖形用戶界面)的選項(xiàng)。在所有GUI方法中,tkinter是最常用的方法。它是Python隨附的Tk GUI工具包的標(biāo)準(zhǔn)Python接口。帶有tkinter的Python是創(chuàng)建GUI應(yīng)用程序的最快,最簡單的方法。使用tkinter創(chuàng)建GUI很容易。
要創(chuàng)建tkinter應(yīng)用程序:
1)導(dǎo)入模塊tkinter
2)創(chuàng)建主窗口(容器)
3)將任意數(shù)量的小部件添加到主窗口
4)將事件觸發(fā)器應(yīng)用于小部件。
導(dǎo)入tkinter與導(dǎo)入Python代碼中的任何其他模塊相同。請注意,在Python 2.x中,模塊的名稱為“ Tkinter”,而在Python 3.x中,模塊的名稱為“ tkinter”。
import tkinter
用戶使用GUI創(chuàng)建Python應(yīng)用程序時(shí)需要記住兩種主要方法。
1)Tk(screenName=None, baseName=None, className=’Tk’, useTk=1):為了創(chuàng)建一個(gè)主窗口,tkinter提供了一種方法‘Tk(screenName=None, baseName=None, className=’Tk’, useTk=1)’。要更改窗口的名稱,可以將className更改為所需的名稱。用于創(chuàng)建應(yīng)用程序主窗口的基本代碼為:
m=tkinter.Tk() where m is the name of the main window object
2)mainloop():當(dāng)應(yīng)用程序準(zhǔn)備運(yùn)行時(shí),會使用一個(gè)名為mainloop()的方法。mainloop()是一個(gè)無限循環(huán),用于運(yùn)行應(yīng)用程序,等待事件發(fā)生,并在窗口未關(guān)閉的情況下處理事件。
m.mainloop()
import tkinter
m = tkinter.Tk()
'''
widgets are added here
'''
m.mainloop()
tkinter還提供了對小部件幾何配置的訪問,可以在父窗口中組織小部件。主要有三個(gè)幾何管理類。
1)pack()方法:在將其放置在父窗口小部件之前,將它們按塊組織起來。
2)grid()方法:在放入父窗口小部件之前,它將窗口小部件組織在網(wǎng)格中(類似于表的結(jié)構(gòu))。
3)place()方法:它通過將小部件放置在程序員指定的位置來組織它們。
您可以在tkinter應(yīng)用程序中放入許多小部件。以下是一些主要小部件的說明:
1.Button:要在您的應(yīng)用程序中添加按鈕,請使用此小部件。
通用語法為:
w=Button(master, option=value)
master是用于表示父窗口的參數(shù)。
有許多選項(xiàng)可用于更改按鈕的格式。可以將選項(xiàng)數(shù)量作為參數(shù)傳遞,并用逗號分隔。下面列出了其中一些。
- activebackground:設(shè)置按鈕在光標(biāo)下的背景色。
- activeforeground:設(shè)置按鈕在光標(biāo)下的前景色。
- bg:設(shè)置正常的背景色。
- command:調(diào)用一個(gè)函數(shù)。
- font:設(shè)置按鈕標(biāo)簽上的字體。
- image:設(shè)置按鈕上的圖像。
- width:設(shè)置按鈕的寬度。
- height:設(shè)置按鈕的高度。
import tkinter as tk
r = tk.Tk()
r.title('Counting Seconds')
button = tk.Button(r, text='Stop', width=25, command=r.destroy)
button.pack()
r.mainloop()
輸出:

2.畫布(Canvas):用于繪制圖片和其他復(fù)雜的布局,例如圖形,文本和小部件。
通用語法為:
w = Canvas(master, option=value)
master is the parameter used to represent the parent window.
有許多選項(xiàng)用于更改小部件的格式。選項(xiàng)的數(shù)目可以通過逗號分隔的參數(shù)傳遞。其中一些列在下面。
- bd:以像素為單位設(shè)置邊框?qū)挾取?/li>
- bg:設(shè)置正常的背景色。
- cursor:設(shè)置畫布中使用的光標(biāo)。
- highlightcolor:設(shè)置焦點(diǎn)高光顯示的顏色。
- width:設(shè)置小部件的寬度。
- height:設(shè)置小部件的高度。
from tkinter import *
master = Tk()
w = Canvas(master, width=40, height=60)
w.pack()
canvas_height=20
canvas_width=200
y = int(canvas_height / 2)
w.create_line(0, y, canvas_width, y )
mainloop()
輸出:

3.CheckButton:通過向用戶顯示多個(gè)選項(xiàng)作為切換按鈕來選擇任意數(shù)量的選項(xiàng)。一般語法為:
w = CheckButton(master, option=value)
有許多選項(xiàng)用于更改此小部件的格式。選項(xiàng)的數(shù)目可以通過逗號分隔的參數(shù)傳遞。其中一些列在下面。
- Title:設(shè)置小部件的標(biāo)題。
- activebackground:當(dāng)小部件在光標(biāo)下時(shí)設(shè)置背景色。
- activeforeground:當(dāng)小部件在光標(biāo)下時(shí)設(shè)置前景色。
- bg:設(shè)置正常背景信息
- command:調(diào)用函數(shù)。
- font:設(shè)置按鈕標(biāo)簽上的字體。
- image:在小部件上設(shè)置圖像。
from tkinter import *
master = Tk()
var1 = IntVar()
Checkbutton(master, text='male', variable=var1).grid(row=0, sticky=W)
var2 = IntVar()
Checkbutton(master, text='female', variable=var2).grid(row=1, sticky=W)
mainloop()
輸出:

4.Entry:用于輸入用戶的單行文本條目。對于多行文本輸入,使用“Text”小組件。
通用語法為:
w=Entry(master, option=value)
master是用于表示父窗口的參數(shù)。
有許多選項(xiàng)可用于更改小部件的格式。可以將選項(xiàng)數(shù)量作為參數(shù)傳遞,并用逗號分隔。下面列出了其中一些。
- bd:以像素為單位設(shè)置邊框?qū)挾取?/li>
- bg:設(shè)置正常的背景色。
- cursor:設(shè)置使用的光標(biāo)。
- command:調(diào)用一個(gè)函數(shù)。
- highlightcolor:設(shè)置焦點(diǎn)高光顯示的顏色。
- width:設(shè)置按鈕的寬度。
- height:設(shè)置按鈕的高度。
from tkinter import *
master = Tk()
Label(master, text='First Name').grid(row=0)
Label(master, text='Last Name').grid(row=1)
e1 = Entry(master)
e2 = Entry(master)
e1.grid(row=0, column=1)
e2.grid(row=1, column=1)
mainloop()
輸出:

5.框架(Frame):它充當(dāng)容納小部件的容器。它用于分組和組織小部件。通用語法為:
w = Frame(master, option=value)
master is the parameter used to represent the parent window.
有許多選項(xiàng)可用于更改小部件的格式。可以將選項(xiàng)數(shù)量作為參數(shù)傳遞,并用逗號分隔。下面列出了其中一些。
- highlightcolor:設(shè)置小部件必須聚焦時(shí)焦點(diǎn)高光的顏色。
- bd:以像素為單位設(shè)置邊框?qū)挾取?/li>
- bg:設(shè)置正常的背景色。
- cursor:設(shè)置使用的光標(biāo)。
- width:設(shè)置小部件的寬度。
- height:設(shè)置小部件的高度。
from tkinter import *
root = Tk()
frame = Frame(root)
frame.pack()
bottomframe = Frame(root)
bottomframe.pack( side = BOTTOM )
redbutton = Button(frame, text = 'Red', fg ='red')
redbutton.pack( side = LEFT)
greenbutton = Button(frame, text = 'Brown', fg='brown')
greenbutton.pack( side = LEFT )
bluebutton = Button(frame, text ='Blue', fg ='blue')
bluebutton.pack( side = LEFT )
blackbutton = Button(bottomframe, text ='Black', fg ='black')
blackbutton.pack( side = BOTTOM)
root.mainloop()
輸出:

6.標(biāo)簽(Label):它是指您可以在其中放置可根據(jù)代碼隨時(shí)更新的任何文本或圖像的顯示框。
通用語法為:
w=Label(master, option=value)
master is the parameter used to represent the parent window.
有許多選項(xiàng)可用于更改小部件的格式。可以將選項(xiàng)數(shù)量作為參數(shù)傳遞,并用逗號分隔。下面列出了其中一些。
- bg:設(shè)置正常的背景色。
- command:調(diào)用一個(gè)函數(shù)。
- font:在按鈕標(biāo)簽上設(shè)置字體。
- image:在按鈕上設(shè)置圖像。
- width:設(shè)置按鈕的寬度。
- height:以設(shè)置按鈕的高度。
from tkinter import *
root = Tk()
w = Label(root, text='GeeksForGeeks.org!')
w.pack()
root.mainloop()
輸出:

7.列表框(Listbox):它為用戶提供了一個(gè)列表,用戶可以從中接受任何數(shù)量的選項(xiàng)。
通用語法為:
w = Listbox(master, option=value)
master is the parameter used to represent the parent window.
有許多選項(xiàng)可用于更改小部件的格式。可以將選項(xiàng)數(shù)量作為參數(shù)傳遞,并用逗號分隔。下面列出了其中一些。
- highlightcolor:設(shè)置小部件必須聚焦時(shí)焦點(diǎn)高光的顏色。
- bg:設(shè)置正常的背景色。
- bd:以像素為單位設(shè)置邊框?qū)挾取?/li>
- font:在按鈕標(biāo)簽上設(shè)置字體。
- image:在小部件上設(shè)置圖像。
- width:設(shè)置小部件的寬度。
- height:設(shè)置小部件的高度。
from tkinter import *
top = Tk()
Lb = Listbox(top)
Lb.insert(1, 'Python')
Lb.insert(2, 'JAVA')
Lb.insert(3, 'C++')
Lb.insert(4, 'Any other')
Lb.pack()
top.mainloop()
輸出:

8.MenuButton:它是自上而下菜單的一部分,始終位于窗口中。每個(gè)菜單按鈕都有其自己的功能。
通用語法為:
w = MenuButton(master, option=value)
master is the parameter used to represent the parent window.
有許多選項(xiàng)可用于更改小部件的格式。可以將選項(xiàng)數(shù)量作為參數(shù)傳遞,并用逗號分隔。下面列出了其中一些。
- activebackground:當(dāng)鼠標(biāo)懸停在小部件上時(shí)設(shè)置背景。
- activeforeground:在鼠標(biāo)懸停在小部件上時(shí)設(shè)置前景。
- bg:設(shè)置正常的背景色。
- bd:設(shè)置指標(biāo)周圍邊框的大小。
- cursor:當(dāng)鼠標(biāo)懸停在菜單按鈕上時(shí)顯示光標(biāo)。
- image:在小部件上設(shè)置圖像。
- width:設(shè)置小部件的寬度。
- height:設(shè)置小部件的高度。
- highlightcolor:設(shè)置小部件必須聚焦時(shí)焦點(diǎn)高光的顏色。
from tkinter import *
top = Tk()
mb = Menubutton ( top, text = "GfG")
mb.grid()
mb.menu = Menu ( mb, tearoff = 0 )
mb["menu"] = mb.menu
cVar = IntVar()
aVar = IntVar()
mb.menu.add_checkbutton ( label ='Contact', variable = cVar )
mb.menu.add_checkbutton ( label = 'About', variable = aVar )
mb.pack()
top.mainloop()
輸出:

9.菜單(Menu):用于創(chuàng)建應(yīng)用程序使用的各種菜單。
通用語法為:
w = Menu(master, option=value)
master is the parameter used to represent the parent window.
有許多選項(xiàng)可用于更改此小部件的格式。可以將選項(xiàng)數(shù)量作為參數(shù)傳遞,并用逗號分隔。下面列出了其中一些。
- title:設(shè)置小部件的標(biāo)題。
- activebackground:設(shè)置小部件在光標(biāo)下方時(shí)的背景顏色。
- activeforeground:設(shè)置小部件在光標(biāo)下方時(shí)的前景色。
- bg:設(shè)置正常的背景色。
- command:調(diào)用一個(gè)函數(shù)。
- font:在按鈕標(biāo)簽上設(shè)置字體。
- image:在小部件上設(shè)置圖像。
from tkinter import *
root = Tk()
menu = Menu(root)
root.config(menu=menu)
filemenu = Menu(menu)
menu.add_cascade(label='File', menu=filemenu)
filemenu.add_command(label='New')
filemenu.add_command(label='Open...')
filemenu.add_separator()
filemenu.add_command(label='Exit', command=root.quit)
helpmenu = Menu(menu)
menu.add_cascade(label='Help', menu=helpmenu)
helpmenu.add_command(label='About')
mainloop()
輸出:

10.消息(Message):它是指多行且不可編輯的文本。它的作用與Label相同。
通用語法為:
w = Message(master, option=value)
master is the parameter used to represent the parent window.
有許多選項(xiàng)可用于更改小部件的格式。可以將選項(xiàng)數(shù)量作為參數(shù)傳遞,并用逗號分隔。下面列出了其中一些。
- bd:設(shè)置指示器周圍的邊框。
- bg:設(shè)置正常的背景色。
- font:在按鈕標(biāo)簽上設(shè)置字體。
- image:在小部件上設(shè)置圖像。
- width:設(shè)置小部件的寬度。
- height:設(shè)置小部件的高度。
from tkinter import *
main = Tk()
ourMessage ='This is our Message'
messageVar = Message(main, text = ourMessage)
messageVar.config(bg='lightgreen')
messageVar.pack( )
main.mainloop( )
輸出:

11.RadioButton:用于向用戶提供多項(xiàng)選擇選項(xiàng)。它為用戶提供了多個(gè)選項(xiàng),用戶必須選擇一個(gè)選項(xiàng)。
通用語法為:
w = RadioButton(master, option=value)
有許多選項(xiàng)可用于更改此小部件的格式。可以將選項(xiàng)數(shù)量作為參數(shù)傳遞,并用逗號分隔。下面列出了其中一些。
- activebackground:設(shè)置小部件在光標(biāo)下方時(shí)的背景顏色。
- activeforeground:設(shè)置小部件在光標(biāo)下方時(shí)的前景色。
- bg:設(shè)置正常的背景色。
- command:調(diào)用一個(gè)函數(shù)。
- font:在按鈕標(biāo)簽上設(shè)置字體。
- image:在小部件上設(shè)置圖像。
- width:以字符為單位設(shè)置標(biāo)簽的寬度。
- height:以字符為單位設(shè)置標(biāo)簽的高度。
from tkinter import *
root = Tk()
v = IntVar()
Radiobutton(root, text='GfG', variable=v, value=1).pack(anchor=W)
Radiobutton(root, text='MIT', variable=v, value=2).pack(anchor=W)
mainloop()
輸出:

12.Scale:它用于提供一個(gè)圖形滑塊,允許從該縮放中選擇任何值。一般語法為:
w = Scale(master, option=value)
master is the parameter used to represent the parent window.
有許多選項(xiàng)可用于更改小部件的格式。可以將選項(xiàng)數(shù)量作為參數(shù)傳遞,并用逗號分隔。下面列出了其中一些。
- cursor:當(dāng)鼠標(biāo)懸停在窗口小部件上時(shí)更改光標(biāo)模式。
- activebackground:當(dāng)鼠標(biāo)懸停在小部件上時(shí),設(shè)置小部件的背景。
- bg:設(shè)置正常的背景色。
- orient:根據(jù)需要將其設(shè)置為“水平”或“垂直”。
- from_:設(shè)置刻度范圍一端的值。
- to:設(shè)置刻度范圍另一端的值。
- image:在小部件上設(shè)置圖像。
- width:設(shè)置小部件的寬度。
from tkinter import *
master = Tk()
w = Scale(master, from_=0, to=42)
w.pack()
w = Scale(master, from_=0, to=200, orient=HORIZONTAL)
w.pack()
mainloop()
輸出:

13.Scrollbar:它是指將用于實(shí)現(xiàn)列出的小部件的滑動控制器。
通用語法為:
w = Scrollbar(master, option=value)
master is the parameter used to represent the parent window.
有許多選項(xiàng)可用于更改小部件的格式。可以將選項(xiàng)數(shù)量作為參數(shù)傳遞,并用逗號分隔。下面列出了其中一些。
- width:設(shè)置小部件的寬度。
- activebackground:當(dāng)鼠標(biāo)懸停在小部件上時(shí)設(shè)置背景。
- bg:設(shè)置正常的背景色。
- bd:設(shè)置指標(biāo)周圍邊框的大小。
- cursor:當(dāng)鼠標(biāo)懸停在菜單按鈕上時(shí)顯示光標(biāo)。
from tkinter import *
root = Tk()
scrollbar = Scrollbar(root)
scrollbar.pack( side = RIGHT, fill = Y )
mylist = Listbox(root, yscrollcommand = scrollbar.set )
for line in range(100):
mylist.insert(END, 'This is line number' + str(line))
mylist.pack( side = LEFT, fill = BOTH )
scrollbar.config( command = mylist.yview )
mainloop()
輸出:

14.Text:編輯多行文字并設(shè)置其顯示方式的格式。
通用語法為:
w =Text(master, option=value)
有許多選項(xiàng)可用于更改文本格式。可以將選項(xiàng)數(shù)量作為參數(shù)傳遞,并用逗號分隔。 下面列出了其中一些。
- highlightcolor:設(shè)置小部件必須聚焦時(shí)焦點(diǎn)高光的顏色。
- insertbackground:設(shè)置小部件的背景。
- bg:設(shè)置正常的背景色。
- font:在按鈕標(biāo)簽上設(shè)置字體。
- image:在小部件上設(shè)置圖像。
- width:設(shè)置小部件的寬度。
- height:設(shè)置小部件的高度。
from tkinter import *
root = Tk()
T = Text(root, height=2, width=30)
T.pack()
T.insert(END, 'GeeksforGeeksnBEST WEBSITEn')
mainloop()
輸出:

15.TopLevel:此窗口小部件由窗口管理器直接控制。它不需要任何父窗口。常規(guī)語法為:
w = TopLevel(master, option=value)
有許多選項(xiàng)可用于更改小部件的格式。可以將選項(xiàng)數(shù)量作為參數(shù)傳遞,并用逗號分隔。下面列出了其中一些。
- bg:設(shè)置正常的背景色。
- bd:設(shè)置指標(biāo)周圍邊框的大小。
- cursor:當(dāng)鼠標(biāo)懸停在菜單按鈕上時(shí)顯示光標(biāo)。
- width:設(shè)置小部件的寬度。
- height:設(shè)置小部件的高度。
from tkinter import *
root = Tk()
root.title('GfG')
top = Toplevel()
top.title('Python')
top.mainloop()
輸出:

16.SpinBox:它是“entry”小部件的一個(gè)條目。在這里,可以通過選擇數(shù)字的固定值來輸入值。一般語法為:
w = SpinBox(master, option=value)
有許多選項(xiàng)可用于更改小部件的格式。可以將選項(xiàng)數(shù)量作為參數(shù)傳遞,并用逗號分隔。下面列出了其中一些。
- bg:設(shè)置正常的背景色。
- bd:設(shè)置指標(biāo)周圍邊框的大小。
- cursor:當(dāng)鼠標(biāo)懸停在菜單按鈕上時(shí)顯示光標(biāo)。
- command:調(diào)用一個(gè)函數(shù)。
- width:設(shè)置小部件的寬度。
- activebackground:當(dāng)鼠標(biāo)懸停在小部件上時(shí)設(shè)置背景。
- disabledbackground:當(dāng)鼠標(biāo)懸停在小部件上時(shí)禁用背景。
- from_:設(shè)置范圍一端的值。
- to:設(shè)置范圍另一端的值。
from tkinter import *
master = Tk()
w = Spinbox(master, from_ = 0, to = 10)
w.pack()
mainloop()
輸出:

17.PannedWindowIt是一個(gè)容器小部件,用于處理排列在其中的窗格數(shù)。一般語法為:
w = PannedWindow(master, option=value)
master是用于表示父窗口的參數(shù)。
有許多選項(xiàng)可用于更改小部件的格式。可以將選項(xiàng)數(shù)量作為參數(shù)傳遞,并用逗號分隔。下面列出了其中一些。
- bg:設(shè)置正常的背景色。
- bd:設(shè)置指標(biāo)周圍邊框的大小。
- cursor:當(dāng)鼠標(biāo)懸停在菜單按鈕上時(shí)顯示光標(biāo)。
- width:設(shè)置小部件的寬度。
- height:設(shè)置小部件的高度。
from tkinter import *
m1 = PanedWindow()
m1.pack(fill = BOTH, expand = 1)
left = Entry(m1, bd = 5)
m1.add(left)
m2 = PanedWindow(m1, orient = VERTICAL)
m1.add(m2)
top = Scale( m2, orient = HORIZONTAL)
m2.add(top)
mainloop()
輸出:
