參考鏈接:https://blog.csdn.net/qq_37482202/article/details/84201259
Tkinter介紹
Tkinter(也叫Tk接口)是Tk圖形用戶界面工具包標准的Python接口。Tk是一個輕量級的跨平台圖形用戶界面(GUI)開發工具。Tk和Tkinter可以運行在大多數的Unix平台、Windows、和Macintosh系統。
Tkinter由一定數量的模塊組成。Tkinter位於一個名為_tkinter(較早的版本名為tkinter)的二進制模塊中。Tkinter包含了對Tk的低級接口模塊,低級接口並不會被應用級程序員直接使用,通常是一個共享庫(或DLL),但是在一些情況下它也被Python解釋器靜態鏈接。
導入庫:
1 from tkinter import * 2 from tkinter.tix import Tk, Control, ComboBox # 升級的組合控件包
在進行界面繪制之前需要初始化Tk()
root = Tk() # 初始化tk
root便是布局的根節點了,以后的布局都在它之上
1 # 設置窗口標題 2 root.title("hello tkinter") 3 # 設置窗口大小 注意:是X 不是* 4 root.geometry("1024x768") 5 # 設置窗口是否可以變化長/寬,False不可變,True可變 6 root.resizable(width=True, height=True) 7 # 引入升級包,這樣才能使用升級的組合控件 8 root.tk.eval('package require Tix')
接下來會設置窗口的屬性。
1. Label
1 activebackground, activeforeground, anchor, 2 background, bitmap, borderwidth, cursor, 3 disabledforeground, font, foreground, 4 highlightbackground, highlightcolor, 5 hightlightthickness, image, justify, 6 padx, pady, relief, takefocus, text, 7 textvariable, underline, wraplength, 8 height, state, width
屬性很多,說一下常用的屬性
1 lable = Label(root, text="label", bg="pink", bd=10, font=("Arial", 12), width=8, height=3) 2 lable.pack(side=LEFT)
第一個 | 要依附的節點 |
text | 上面顯示的字 |
bg | 背景顏色 也可以傳rgb16進制的形式 |
bd | 邊框寬度 |
font | 字體 第一個是字體樣式 第二個是字體大小 |
width height | 寬 高 |
bitmap | 圖像 |
highlightcolor | 高亮時字體顏色 |
highlightbackground | 高亮時背景顏色 |
textvariable | 綁定的變量 之后如果變量值發生變動 字也會隨之改變 |
wraplength | 換行控制 如果是50就表示寬度到50就換行顯示 |
最后你需要調用pack()來把控件布置上去,你可以指定布局方式,可定義的屬性也非常多
1 # Booleans 2 NO=FALSE=OFF=0 3 YES=TRUE=ON=1 4 5 # -anchor and -sticky 6 N='n' 7 S='s' 8 W='w' 9 E='e' 10 NW='nw' 11 SW='sw' 12 NE='ne' 13 SE='se' 14 NS='ns' 15 EW='ew' 16 NSEW='nsew' 17 CENTER='center' 18 19 # -fill 20 NONE='none' 21 X='x' 22 Y='y' 23 BOTH='both' 24 25 # -side 26 LEFT='left' 27 TOP='top' 28 RIGHT='right' 29 BOTTOM='bottom' 30 31 # -relief 32 RAISED='raised' 33 SUNKEN='sunken' 34 FLAT='flat' 35 RIDGE='ridge' 36 GROOVE='groove' 37 SOLID = 'solid' 38 39 # -orient 40 HORIZONTAL='horizontal' 41 VERTICAL='vertical' 42 43 # -tabs 44 NUMERIC='numeric' 45 46 # -wrap 47 CHAR='char' 48 WORD='word' 49 50 # -align 51 BASELINE='baseline' 52 53 # -bordermode 54 INSIDE='inside' 55 OUTSIDE='outside' 56 57 # Special tags, marks and insert positions 58 SEL='sel' 59 SEL_FIRST='sel.first' 60 SEL_LAST='sel.last' 61 END='end' 62 INSERT='insert' 63 CURRENT='current' 64 ANCHOR='anchor' 65 ALL='all' # e.g. Canvas.delete(ALL) 66 67 # Text widget and button states 68 NORMAL='normal' 69 DISABLED='disabled' 70 ACTIVE='active' 71 # Canvas state 72 HIDDEN='hidden' 73 74 # Menu item types 75 CASCADE='cascade' 76 CHECKBUTTON='checkbutton' 77 COMMAND='command' 78 RADIOBUTTON='radiobutton' 79 SEPARATOR='separator' 80 81 # Selection modes for list boxes 82 SINGLE='single' 83 BROWSE='browse' 84 MULTIPLE='multiple' 85 EXTENDED='extended' 86 87 # Activestyle for list boxes 88 # NONE='none' is also valid 89 DOTBOX='dotbox' 90 UNDERLINE='underline' 91 92 # Various canvas styles 93 PIESLICE='pieslice' 94 CHORD='chord' 95 ARC='arc' 96 FIRST='first' 97 LAST='last' 98 BUTT='butt' 99 PROJECTING='projecting' 100 ROUND='round' 101 BEVEL='bevel' 102 MITER='miter' 103 104 # Arguments to xview/yview 105 MOVETO='moveto' 106 SCROLL='scroll' 107 UNITS='units' 108 PAGES='pages'
寫完這些運行程序還是無法出現界面,那是因為還少了一句
root.mainloop()
2. Button
1 """ 2 command: 點擊調用的方法 3 activeforeground: 點擊時按鈕上字的顏色 4 activebackground: 點擊時按鈕的背景顏色 5 """ 6 button = Button(root, text='QUIT', command=root.quit, activeforeground="black", activebackground='blue', bg='red', 7 fg='white') 8 button.pack(fill=Y, expand=1)
3. Scale: 滑動條
1 def resize(ev=None): 2 lable.config(font='Helvetica -%d bold' % scale.get()) 3 4 # 滑動條 5 """ 6 from_: 滑動條起始值 7 to: 滑動條終點值 8 origent: 樣式 兩種樣式 一橫一豎 9 """ 10 scale = Scale(root, from_=10, to=40, orient=HORIZONTAL, command=resize) 11 scale.set(12) 12 scale.pack()
和button不同的是command不再是點擊事件了而是拖動事件,調用set()方法可以設置當前位置
4. NumberericUpDown: 數字選擇框
1 # 數字選擇框 2 """ 3 integer: 是否為整數 4 max: 最大值 5 min: 最小值 6 value: 初始值 7 step: 步長 8 """ 9 ct = Control(root, label='Number:', integer=True, max=12, min=2, value=2, step=2) 10 ct.label.config(font='Helvetica 14 bold') 11 ct.pack()
5. ComboBox: 下拉選擇框
1 # 下拉選擇框 2 """ 3 label: 前面要顯示的字 4 editable: 控制是否可更改 5 insert(): 給下拉選擇框添加選項 6 """ 7 cb = ComboBox(root, label='Type:', editable=True) 8 for animal in ('dog', 'cat', 'hamster', 'python'): 9 cb.insert(END, animal) 10 cb.pack()
6. Menu: 菜單
1 # 菜單選項 2 menubar = Menu(root) 3 root.config(menu=menubar) 4 filemenu = Menu(menubar, tearoff=0) 5 # 給menu添加一個選項 6 menubar.add_cascade(label='文件', menu=filemenu) 7 # 添加子選項 8 filemenu.add_command(label='新建...', command=click()) 9 filemenu.add_command(label='打開...', command=click()) 10 filemenu.add_command(label='保存...', command=click()) 11 filemenu.add_command(label='關閉填寫...', command=root.quit)
7. Frame
1 # frame相當於一個局部的窗體,可以用來裝載其他控件 2 frame1 = Frame(root) 3 frame1.pack(fill=X) 4 label1 = Label(frame1, text='您的花名:') 5 label1.grid(row=1, column=0)
使用grid能讓你更容易把握控件的位置,你可以指定它出現在幾行幾列,是否跨行跨列,跨幾行等等
8. Radiobutton: 單選框
1 # 單選框 2 frame2 = Frame(root) 3 frame2.pack(fill=X) 4 label2 = Label(frame2, text='您的性別:') 5 label2.grid(row=1, column=0) 6 sex = StringVar() 7 sex_male = Radiobutton(frame2, text='男', fg='blue', variable=sex, value='男') 8 sex_male.grid(row=1, column=2) 9 sex_female = Radiobutton(frame2, text='女', fg='red', variable=sex, value='女') 10 sex_female.grid(row=1, column=4)
這個單選框寫出來,剛開始男和女兩個單選框都是選中狀態,不過,你拿鼠標單擊一下,就可以正常的單選狀態了。
9. ListBox: 列表
1 # 列表 2 frame4 = Frame(root) 3 frame4.pack(fill=X) 4 label4 = Label(frame4, text='4、請刪除您不會的變成語言:') 5 label4.grid(row=1, column=0) 6 listbox = Listbox(frame4) 7 listbox.grid(row=1, column=1) 8 for item in ["C", "C++", "JAVA", "PYTHON", "R", "SQL", "JS"]: 9 listbox.insert(END, item) 10 11 DELETE = Button(frame4, text='刪除', command=lambda listbox=listbox: listbox.delete(ANCHOR)) 12 DELETE.grid(row=1, column=2) 13 language = Button(frame4, text='確定') 14 language.grid(row=2, column=1)
這里按鈕點擊事件的寫法使用lambda表達式寫的,用法可以自行百度
10. Canvas: 畫板
1 from tkinter import * 2 3 4 class CanvasDemo: 5 def __init__(self): 6 window = Tk() 7 window.title("CanvasDemo") 8 9 self.canvas = Canvas(window, width=200, height=100, bg="White") 10 self.canvas.pack() 11 12 frame = Frame(window) 13 frame.pack() 14 15 btRectangle = Button(frame, text="長方形", command=self.displayRect) 16 btOval = Button(frame, text="橢 圓", command=self.displayOval) 17 btArc = Button(frame, text="圓 弧", command=self.displayArc) 18 btPolygon = Button(frame, text="多邊形", command=self.displayPolygon) 19 btLine = Button(frame, text=" 線 ", command=self.displayLine) 20 btString = Button(frame, text="文 字", command=self.displayString) 21 btClear = Button(frame, text="清 空", command=self.clearCanvas) 22 23 btRectangle.grid(row=1, column=1) 24 btOval.grid(row=1, column=2) 25 btArc.grid(row=1, column=3) 26 btPolygon.grid(row=1, column=4) 27 btLine.grid(row=1, column=5) 28 btString.grid(row=1, column=6) 29 btClear.grid(row=1, column=7) 30 31 window.mainloop() 32 33 def displayRect(self): 34 self.canvas.create_rectangle(10, 10, 190, 90, tags="rect") 35 36 def displayOval(self): 37 self.canvas.create_oval(10, 10, 190, 90, tags="oval", fill="red") 38 39 def displayArc(self): 40 self.canvas.create_arc(10, 10, 190, 90, start=-90, extent=90, width=5, fill="red", tags="arc") 41 42 def displayPolygon(self): 43 self.canvas.create_polygon(10, 10, 190, 90, 30, 50, tags="polygon") 44 45 def displayLine(self): 46 self.canvas.create_line(10, 10, 190, 90, fill='red', tags="line") 47 self.canvas.create_line(10, 90, 190, 10, width=9, arrow="last", activefill="blue", tags="line") 48 49 def displayString(self): 50 self.canvas.create_text(60, 40, text="Hi,i am a string", font="Tine 10 bold underline", tags="string") 51 52 def clearCanvas(self): 53 self.canvas.delete("rect", "oval", "arc", "polygon", "line", "string") 54 55 56 CanvasDemo()
11. CheckButton: 多選框
1 # 多選框,onvalue代表被勾選時的值,offvalue代表不被勾選時的值 2 frame8 = Frame(root) 3 frame8.pack() 4 agree = StringVar() 5 agree = Checkbutton(frame8, text='我同意', variable=agree, onvalue='確定', offvalue='不確定',) 6 agree.grid()
12. LabelFrame: 容器框
1 # 容器框 2 frame10 = Frame(root) 3 frame10.pack() 4 group = LabelFrame(frame10, text='特別鳴謝', padx=5, pady=5) 5 group.grid() 6 w = Label(group, text='容器框') 7 w.pack()
這些差不多夠用了。