参考链接: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()
这些差不多够用了。