GUI———Tkinter

Tkinter

1、Label & Button 标签和按钮

#一、基础的命名与标签

#1.窗体的设置
window = tk.Tk()#实例化一个窗体
window.title("my window") #给窗体起一个名字
window.geometry("200x100") #定义窗体的大小

#2.标签的设置
L = tk.Label(window,text="OMG! this is TK",bg = "green",font=("Arial",2,),width=15,height=2)
# window:在window中显示;bg:背景颜色;font:字体类型及大小;width/heigh:宽与高,这里的大小是通过字符衡量的
L.pack()#标签显示的位置

#3.窗口的不停更新
window.mainloop()


#二、Button的设置
#1.窗体的设置
window = tk.Tk()#实例化一个窗体
window.title("my window") #给窗体起一个名字
window.geometry("500x500") #定义窗体的大小
var = tk.StringVar()#tk里面特定的变量形式

#2.标签的设置
L = tk.Label(window,textvariable=var, bg = "green",font=("Arial",12,),width=15,height=2)
# window:在window中显示;bg:背景颜色;font:字体类型及大小;width/heigh:宽与高,这里的大小是通过字符衡量的
L.pack()#标签显示的位置

on_hit = False

#其实这块是有点晕的
def hit_me():
    global on_hit #将on_hit声明为全局变量,并对全局变量进行修改
    if on_hit == False:
        on_hit = True
        var.set("you hit me")
    else:
        on_hit = False
        var.set("")

#3.button的设置
b = tk.Button(window,text="hit me",width=15,height = 2,command=hit_me)#hit_me是一个自定义的函数
b.pack()
#感觉就是点击一次执行一次

2. Entry&Text 输入,文本框

1.窗体的设置
window = tk.Tk()#实例化一个窗体
window.title("my window") #给窗体起一个名字
window.geometry("500x500") #定义窗体的大小

#2.输入的内容
e = tk.Entry(window,show="**")#show为掩饰字符,show的默认值为None
e.pack()

def insert_point():
    var = e.get()#通过get索取entry的值
    t.insert("insert",var)

def insert_end():
    var = e.get()
    t.insert("end",var)
    # t.insert("2.2",var)#在第2行第2列插入

b1 = tk.Button(window,text ="insert point",width=15,height=2,
               command = insert_point)
b1.pack()

b2 = tk.Button(window,text = "insert end",
               command=insert_end)
b2.pack()
#文本显示
t = tk.Text(window,height=2)
t.pack()

#3.窗口的不停更新
window.mainloop()

3.Listbox列表部件

#1.窗体的设置
window = tk.Tk()#实例化一个窗体
window.title("my window") #给窗体起一个名字
window.geometry("500x500") #定义窗体的大小

#设置一个标签
var1 = tk.StringVar()
l = tk.Label(window,bg ="yellow",width=4,textvariable=var1)
l.pack()
#很不喜欢这样把函数全局变量放在后面
def print_selection():
    value = lb.get(lb.curselection())
    var1.set(value) #进行值的传递

#button的设置
b1 = tk.Button(window,text="print selection",width=15,
               height=2,command = print_selection)
b1.pack()

#listbox的设置
var2 = tk.StringVar()
var2.set((11,22,33,44))
lb = tk.Listbox(window,listvariable=var2)
list_item = [1,2,3,4]
for item in list_item:
    lb.insert("end",item)
lb.insert(1,"first")
lb.insert(2,"second")
lb.delete(2)
lb.pack()

#3.窗口的不停更新
window.mainloop()

4.Radiobutton选择按钮

#1.窗体的设置
window = tk.Tk()#实例化一个窗体
window.title("my window") #给窗体起一个名字
window.geometry("500x500") #定义窗体的大小

#设置一个标签
var = tk.StringVar()
l = tk.Label(window,bg ="yellow",width=20,text="empty")#初始默认值都为empty
l.pack()

def print_selection():
    l.config(text="you have selected"+var.get()) #config 修改任何设置

r1 = tk.Radiobutton(window,text="Option A",
                    variable=var,value="A",
                    command=print_selection) #把A赋值于variable
r1.pack()

r2 = tk.Radiobutton(window,text="Option B",
                    variable=var,value="B",
                    command=print_selection) #把A赋值于variable
r2.pack()

r2 = tk.Radiobutton(window,text="Option B",
                    variable=var,value="B",
                    command=print_selection) #把A赋值于variable
r2.pack()

#3.窗口的不停更新
window.mainloop()

5.scale尺度

#1.窗体的设置
window = tk.Tk()#实例化一个窗体
window.title("my window") #给窗体起一个名字
window.geometry("500x500") #定义窗体的大小

#设置一个标签
var = tk.StringVar()
l = tk.Label(window,bg ="yellow",width=20,text="empty")#初始默认值都为empty
l.pack()

def print_selection(v):
    l.config(text="you have selected"+v) #config 修改任何设置

s = tk.Scale(window,label="try me",from_=5,to=11,orient=tk.HORIZONTAL,
             length=400,showvalue=3,tickinterval=3,resolution=0.02,
             command=print_selection)
#orient,横向显示还是纵向显示,length指的是像素长度,showvalue是否显示数值,0是否,1是是,
#tickinterval:标签的变量长度,是每个几个数显示一个数
#resolution保留几位小数。0.01:2位小数;0.1:1位小数;1:整数
#command。每次拖动的时候会运行该函数,有默认的传入值,所以需要一个参数v
s.pack()

window.mainloop()

6.Checkbutton

#1.窗体的设置
window = tk.Tk()#实例化一个窗体
window.title("my window") #给窗体起一个名字
window.geometry("500x500") #定义窗体的大小

#设置一个标签
var = tk.StringVar()
l = tk.Label(window,bg ="yellow",width=20,text="empty")#初始默认值都为empty
l.pack()

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")


var1 = tk.IntVar()
var2 = tk.IntVar()
#存在的价值就是做一个变量的传递

cl1 = tk.Checkbutton(window, text="python", variable=var1,onvalue=1,offvalue=0,
                    command=print_selection)
#onvalue=1,offvalue=0,选择这个按钮就把variable赋值为1,不选就赋值为0

cl2 = tk.Checkbutton(window, text="C++", variable=var2,onvalue=1,offvalue=0,
                    command=print_selection)
cl1.pack()
cl2.pack()

window.mainloop()

7.Canvas画布

#1.窗体的设置
window = tk.Tk()#实例化一个窗体
window.title("my window") #给窗体起一个名字
window.geometry("500x500") #定义窗体的大小

canvas = tk.Canvas(window,bg="blue",height=250,width=500) #定义一个画布
image_file = tk.PhotoImage(file = "E:\Desktop\littleman.png")#加载一个图片
image = canvas.create_image(0,0,anchor="nw",image = image_file)
#anchor:图片的锚定点在哪里,nw:左上
x0,y0,x1,y1 = 150,150,80,80
line = canvas.create_line(x0,y0,x1,y1)#画直线从一个点一个点到另外一个点

oval = canvas.create_oval(x0+50,y0,x1,y1,fill = "red")#画一个圆,用红色进行填充

arc = canvas.create_arc(x0+30,y0+30,x1+30,y1+30,start=0,extent=180)#扇形开始于0度,打开了180度

rect = canvas.create_rectangle(200,200,100,100)#正方形
canvas.pack()

def moveit():
    canvas.move(rect,0,2)#每次x移动0,y移动2

b = tk.Button(window,text="move",command=moveit).pack()

window.mainloop()

8.Menubar

#1.窗体的设置
window = tk.Tk()#实例化一个窗体
window.title("my window") #给窗体起一个名字
window.geometry("500x500") #定义窗体的大小

l = tk.Label(window,text="",bg="yellow")
l.pack()
counter = 0
def do_job():
    global counter
    l.config(text = "执行了" + str(counter))
    counter += 1

menubar = tk.Menu(window)

filemenu = tk.Menu(menubar,tearoff=0)#filemenu一个菜单,放在menubar,tearoff是否有间隔
menubar.add_cascade(label="文件",menu=filemenu)#filemenu的名字为"File",待会试一下能不能直接进行修改
filemenu.add_command(label="新文件",command=do_job)
filemenu.add_command(label="打开文件",command=do_job)
filemenu.add_command(label="保存文件",command=do_job)
filemenu.add_separator() #子菜单中加入分割线
filemenu.add_command(label="退出",command=window.quit)#退出窗口

editmenu = tk.Menu(menubar,tearoff=0)#editmenu是menubar中的一个menu
menubar.add_cascade(label="编辑",menu=editmenu)#filemenu的名字为"File"
editmenu.add_command(label="剪切",command=do_job)
editmenu.add_command(label="复制",command=do_job)
editmenu.add_command(label="粘贴",command=do_job)
editmenu.add_separator() #子菜单中加入分割线
editmenu.add_command(label="退出",command=window.quit)#退出窗口

window.config(menu=menubar)

window.mainloop()

9.Frame框架

#1.窗体的设置
window = tk.Tk()#实例化一个窗体
window.title("my window") #给窗体起一个名字
window.geometry("500x500") #定义窗体的大小


frm = tk.Frame(window)#大框架
frm.pack()

frm_1 = tk.Frame(frm,)#在大框架上放置一个小框架
frm_2 = tk.Frame(frm,)
frm_1.pack(side="left")#在大框架的左边
frm_2.pack(side="right")#在大框架的右边

tk.Label(frm_1,text = "on the frm_11").pack()#text:显示的内容
tk.Label(frm_1,text = "on the frm_12").pack()
tk.Label(frm_2,text = "on the frm_杨").pack()
window.mainloop()

10.messagebox弹窗

import tkinter as tk
import tkinter.messagebox #直接用tk.messagebox会报错

#1.窗体的设置
window = tk.Tk()#实例化一个窗体
window.title("my window") #给窗体起一个名字
window.geometry("500x500") #定义窗体的大小

def hit_me():
    tk.messagebox.showinfo(title = "HI",message="hahhahahhaha")
    tk.messagebox.showwarning(title="HI",message="nonononono")
    tk.messagebox.showerror(title="HI",message="NO!!!!never")
    a = tk.messagebox.askquestion(title="HI",message="你是杨某人吗?")#return "yes","no"
    if a == "yes":#利用返回值做文章
        print("我是你爸爸吧")

    tk.messagebox.askyesno(title="HI",message="杨某人是对的嘛?")#return "True","False"

tk.Button(window,text="hit me",command=hit_me).pack()
window.mainloop()

11 pack grid place 放置位置

#1.窗体的设置
window = tk.Tk()#实例化一个窗体
window.title("my window") #给窗体起一个名字
window.geometry("500x500") #定义窗体的大小

#1.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")
window.mainloop()

#2.grid
# #实验失败,有空再琢磨吧
for i in range(4):
    for j in range(3):
        tk.Label(window,text=1).grid(row=i,colum=j,)

#3.palce
tk.Label(window,text=1).place(x=10,y=100,anchor="nw")#anchor方位,x,y指的是像素点
window.mainloop()

12登录窗口

#1.窗体的设置
window = tk.Tk()#实例化一个窗体
window.title("my window") #给窗体起一个名字
window.geometry("500x500") #定义窗体的大小

#2.设置欢迎图片
canvas = tk.Canvas(window,height=250,width=500)
image_file = tk.PhotoImage(file="E:\Desktop\welcome.png")
image = canvas.create_image(0,0,anchor="nw",image =image_file)
canvas.pack(side="top")

#用户信息
tk.Label(window,text="用户名").place(x=85,y=300)
tk.Label(window,text="密码").place(x=85,y=350)

#登录框,Entry
#登录名
var_user_name = tk.StringVar()
var_user_name.set("example@python.com")#设置初始默认值!
entry_user_name = tk.Entry(window,textvariable=var_user_name)
entry_user_name.place(x = 150,y = 300)
#登录密码
var_user_pwd = tk.StringVar()
entry_user_pwd = tk.Entry(window,textvariable=var_user_pwd,show="*")
entry_user_pwd.place(x = 150,y = 350)


##烂尾了!!!
posted @ 2023-06-19 11:14  小杨的冥想课  阅读(20)  评论(0编辑  收藏  举报