tkinter 图形界面编程

使用Python自带tkinter库,简单,但是简陋

图形界面编程要点

控件、布局、事件响应、对话框

tkinter控件  import tkinter as tk;    tkinter扩展控件  from tkinter import ttk

# tk中的控件ttk中都有,且更美观,用法基本和tk一样,且ttk多出几个控件

# tkinter的常用控件
import tkinter as tk

win = tk.Tk() #生成一个窗口
tk.Label(win,.....) #在窗口win上生成一个Label,该Label的母体是win
ckb = tk.Checkbutton(win,.....) #在窗口上生成一个Checkbutton
frm = tk.Frame(win,.....) #在窗口上生成一个Frame
bt = tk.Button(frm,......) #在frm上生成一个Button

用grid布局生成窗口

在grid布局里,行列默认增量分配权重为0,宽高不会随着窗口大小变化而变化。可以将增量分配权重设为1,使网格随窗口大小自动变化。

win.columnconfigure(0,weight = 1)  # 指定第0列增量分配权重为1 
win.rowconfigure(0,weight = 1)  # 指定第0行增量分配权重为1 

grid()函数的sticky参数,sticky指明控件在单元格中的“贴边方式”,即是否要贴着单元格的四条边。
该参数可以是个字符串,包含"E","W","S","N"四个字符中的一个或多个

使用Frame控件进行布局

  • 控件多了,要算每个控件行、列、rowspan,columnspan很麻烦
  • Frame控件上面还可以摆放控件,可以当作底板使用
  • 可以在Frame控件上面设置网格进行Grid布局,摆放多个控件
import tkinter as tk
win = tk.Tk()
win.title('人事系统')
frm01Red = tk.Frame(win,bg="red",highlightthickness=2) #背景红色,边框宽度2
frm01Red.grid(row=0,column=1,columnspan=2,sticky="WE")
tk.Label(frm01Red, text="姓名:").grid(row=0,column=0,padx=6,pady=6)  # padx、pady指定水平和垂直方向上的外边距
tk.Entry(frm01Red).grid(row=0,column=1,padx=6,pady=6)
tk.Label(frm01Red, text="手机号:").grid(row=0,column=2,padx=6,pady=6)
tk.Entry(frm01Red).grid(row=0,column=3,padx=6,pady=6)
tk.Button(frm01Red,text="更新").grid(row=0,column=4,padx=6,pady=6)
win.mainloop()

 控件属性和事件响应概述

  • 有的控件有函数可以用来设置和获取其属性,或以字典下标的形式获取和设置其属性
lbHint = tk.Label(win,text = "请登录")
lbHint["text"] = "登录成功!" #修改lbHint的文字
txt = tk.Text(win)
txt.get(0.0, tk.END)) #取全部文字
  •  有的控件必须和一个变量相关联,取变量值或设置变量值,就是取或设置该控件的属性
s = tk.StringVar()  # tk里的字符串型变量
s.set("sin(x)")  # 对s进行赋值
tk.Entry(win,textvariable = s)
print(s.get())  # 获取编辑框里的文字
  • 创建有些控件时,可以用command参数指定控件的事件响应函数
tk.Button(win,text="显示函数图",command = myfunc) #myfunc是函数名
tk.Checkbox(win,text="显示函数图",command = lambda:print("hello"))  # command对应的函数没有参数
  •  可以用控件的bind函数指定事件响应函数 
lb = tk.Label(win,text="something")
lb.bind("<ButtonPress-1>",mouse_down) #鼠标左键按下事件
lb.bind("<Double-Button-1>", lambda e:btAdd_click())  # 鼠标双击事件,响应函数是lambda表达式,带尖括号的事件,响应函数必须有一个参数

猜你喜欢

转载自blog.csdn.net/m0_46303430/article/details/125889237