我真的不想学英语,所以就来填坑了

在做人工智能导论作业时初步接触tkinker,但当时大多的操作是照猫画虎,写个便签,记录一下,顺便系统地学习学习。

窗口主体框架

每一个 tkinter 应用的主体框架都可以包含下面这部分. 定义window窗口 和window的一些属性, 然后书写窗口内容, 最后执行window.mainloop让窗口活起来.
首先import library,import tkinter as tk

window = tk.Tk()
window.title('my window')
window.geometry('200x100')

# 这里是窗口的内容

window.mainloop()

标签

l = tk.Label(window, 
    text='OMG! this is TK!',    # 标签的文字
    bg='green',     # 背景颜色
    font=('Arial', 12),     # 字体和字体大小
    width=15, height=2  # 标签长宽
    )
l.pack()    # 固定窗口位置

同时,利用如下方式也可以实现窗口的文字变换

var = tk.StringVar()    # 这时文字变量储存器
l = tk.Label(window, 
    textvariable=var,   # 使用 textvariable 替换 text, 因为这个可以变化
    bg='green', font=('Arial', 12), width=15, height=2)
l.pack()

# 也可以这样
l = tk.Label(window, bg='yellow', width=20, text='empty')
def print_selection():
    l.config(text='you have selected ' + var.get()) # 每次调用该功能标签中的文字都会改变

按钮

b = tk.Button(window, 
    text='hit me',      # 显示在按钮上的文字
    width=15, height=2, 
    command=hit_me)     # 点击按钮式执行的命令,按钮被点击即执行hit_me功能
b.pack()    # 按钮位置

def hit_me():
    # function 

输入框

e = tk.Entry(window,show='*') # 用户输入任何内容都显示为*
e.pack()

# 利用e.get()可以获取当前输入框中的文字
var = e.get()

显示框

t = tk.Text(window,height=2)
t.pack()

# 利用t.insert()可以实现对显示框中的内容进行改变
t.insert('insert',var) # 将var对应的内容插入当前光标的位置
t.insert('end',var) # 将var对应的内容插入显示框尾部

Listbox

用处不大

var2 = tk.StringVar()
var2.set((11,22,33,44)) #为变量设置值

#创建Listbox

lb = tk.Listbox(window, listvariable=var2)  #将var2的值赋给Listbox

#创建一个list并将值循环添加到Listbox控件中
list_items = [1,2,3,4]
for item in list_items:
    lb.insert('end', item)  #从最后一个位置开始加入值
lb.insert(1, 'first')       #在第一个位置加入'first'字符
lb.insert(2, 'second')      #在第二个位置加入'second'字符
lb.delete(2)                #删除第二个位置的字符
lb.pack()

# 可以利用如下语句获取当前选中的文本
value = lb.get(lb.curselection()) # 获取当前选中的文本

选择按钮

def print_selection():
    l.config(text='you have selected ' + var.get())

r1 = tk.Radiobutton(window, text='Option A',
                    variable=var, value='A',
                    command=print_selection)
r1.pack()
r2 = tk.Radiobutton(window, text='Option B',
                    variable=var, value='B',
                    command=print_selection)
r2.pack()
r3 = tk.Radiobutton(window, text='Option C',
                    variable=var, value='C',
                    command=print_selection)
r3.pack()

# 其中variable=var, value='A'的意思就是,当我们鼠标选中了其中一个选项,把value的值A放到变量var中,然后赋值给variable,再执行var.get()即可获得选定选项的value。

Scale

我的最爱!

# Sacle的初始化
s = tk.Scale(window, label='try me', from_=5, to=11, orient=tk.HORIZONTAL,
             length=200, showvalue=0, tickinterval=2, resolution=0.01, command=function)
             # 参数不必多介绍,老痛苦回忆了
s.pack()

在这里要强调一下scale中的command,他有一个非常牛逼的点,他会自动传入一个参数,所以哉定义其对应的function时要注意加上该参数。
这里传入的参数是什么呢?不是别的,正是当前scale对应的取值,所以要获得scale上的值,我们可以用下面的方法

s = tk.Scale(window, label='try me', from_=5, to=11, orient=tk.HORIZONTAL,
             length=200, showvalue=0, tickinterval=2, resolution=0.01, command=function)
s.pack()
def function(vv):
    v=vv
    print(v)
# 这样便可以随滑块的滑动改变v的取值了

勾选项

var1 = tk.IntVar()
c1 = tk.Checkbutton(window, text='Python', variable=var1, onvalue=1, offvalue=0,
                    command=print_selection)
c1.pack()
# 参数onvalue和前面讲的部件radiobutton中的value相似, 当我们选中了这个checkbutton,onvalue的值1就会放入到var1中, 然后var1将其赋值给参数variable,offvalue用法相似,但是offvalue是在没有选中这个checkbutton时,offvalue的值1放入var1.

def print_selection():
    if (var1.get() == 1) & (var2.get() == 0):   #如果选中第一个选项,未选中第二个选项
        l.config(text='I love only Python ')
    elif (var1.get() == 0) & (var2.get() == 1): #如果选中第二个选项,未选中第一个选项
        l.config(text='I love only C++')
    elif (var1.get() == 0) & (var2.get() == 0):  #如果两个选项都未选中
        l.config(text='I do not love either')
    else:
        l.config(text='I love both')             #如果两个选项都选中
# 可以通过if-else语句实现不同的组合功能

Canvas

画棋盘
插入图片

image_file = tk.PhotoImage(file='ins.gif') # 创造一个变量存放ins.gif这张图片,注意图片要存放在根目录
image = canvas.create_image(10, 10, anchor='nw', image=image_file)  # 参数10,10就是图片放入画布的坐标, 而这里的anchor=nw则是把图片的左上角作为锚定点,在加上刚刚给的坐标位置,即可将图片位置确定。

画几何图案

x0, y0, x1, y1= 50, 50, 80, 80

# 画直线,从x0,y0到x1,y1
line = canvas.create_line(x0, y0, x1, y1)

#创建一个圆,填充色为`red`红色
oval = canvas.create_oval(x0, y0, x1, y1, fill='red')  

#创建一个扇形,start=0和extent=180其实就是从0度到180度
arc = canvas.create_arc(x0+30, y0+30, x1+30, y1+30, start=0, extent=180)  

#创建一个矩形,同样也可以用fill参数进行填充,在这里不做演示
rect = canvas.create_rectangle(100, 30, 100+20, 30+20)  


移动图形

canvas.move(rect, 0, 2)
# 参数(rect,0,2)就是移动rect这个变量,即我们看到的矩形,后面的0和2,也就是横坐标移动0个单位,纵坐标移动2个单位

建菜单栏,我这辈子应该是用不上这个功能

menubar = tk.Menu(window) # 建立菜单栏对象(菜单栏指存放菜单的那个框框)

filemenu = tk.Menu(menubar, tearoff=0) # 定义一个空菜单单元

menubar.add_cascade(label='File', menu=filemenu) # 将上面定义的空菜单命名为`File`,放在菜单栏中

filemenu.add_command(label='New', command=do_job) # 在`File`中加入`New`的小菜单,即我们平时看到的下拉菜单,每一个小菜单对应命令操作。如果点击这些单元, 就会触发`do_job`的功能

filemenu.add_separator()##这里就是一条分割线

filemenu.add_command(label='Exit', command=window.quit) # quit功能


# 建立二级菜单
submenu = tk.Menu(filemenu) # 和上面定义菜单一样,不过此处是在`File`上创建一个空的菜单

filemenu.add_cascade(label='Import', menu=submenu, underline=0) # 给放入的菜单`submenu`命名为`Import`

submenu.add_command(label="Submenu1", command=do_job)##这里和上面也一样,在`Import`中加入一个小菜单命令`Submenu1`

不同的放置方式

pack

tk.Label(window, text='1').pack(side='top')#上
tk.Label(window, text='1').pack(side='bottom')#下
tk.Label(window, text='1').pack(side='left')#左
tk.Label(window, text='1').pack(side='right')#右

grid

tk.Label(window, text=1).grid(row=i, column=j, padx=10, pady=10)
# 以表格格式放置,padx就是单元格左右间距,pady就是单元格上下间距,放在表格的(i,j)位置

place

tk.Label(window, text=1).place(x=20, y=10, anchor='nw')
# 利用精确坐标定位,anchor为锚点

😞呢




©著作权归作者所有