smart-zihan

参考链接: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()

 

 

这些差不多够用了。

分类:

技术点:

相关文章:

  • 2021-10-07
  • 2022-12-23
  • 2021-12-24
  • 2022-12-23
  • 2022-12-23
  • 2021-10-30
  • 2021-12-24
猜你喜欢
  • 2021-04-19
  • 2022-12-23
  • 2021-07-31
  • 2022-12-23
  • 2021-11-16
相关资源
相似解决方案