gui - tkinter 开发
GUI 用户交互界面
tkinter 介绍
tkinter python自带的gui库,对图形图像处理库tk的封装
其他gui:pythonwin,wxpython,pyQT。。
概念介绍
组件:组成界面的构成内容就是组件。 按钮,文本输入框,滚动条,菜单,列表。。。
窗口:一个软件的矩形区域
界面开发的最小内容:
1.导入tkinter模块
2.创建主窗口对象
3.将主窗口对象加入消息循环当中
组件的摆放方式:
1.pack()方式 ->方向/方位摆放方法
2.grid()方式 ->网格摆放方法
3.place()方式 ->定位摆放方法(推荐)
pack()方式:(少用)
side 设置组件相对于父组件的摆放位置
ipadx,ipady 设置组件的内部间距
padx,pady 设置多个组件之间的外部间距
expand 设置side是否失效
注意:仅仅使用pack无法实现表格方式,必须借助后面的Frame组件才可以实现,非常复杂。
gird()方式:(少用)
row 设置行数 默认为0
column 设置列数 默认为0
rowspan 设置跨行数量
cloumnspan 设置跨列的数量
ipadx,ipady 设置组件内部间距
padx,pady 设置多个组件之间的外部间距
place() 方式:
绝对定位布局:
x 设置距离左上角的水平长度 单位 都是像素
y 设置距离左上角的垂直高度 单位 都是像素
width 设置组件所占据的宽度 单位 都是像素
height 设置组件所占据的宽度 单位 都是像素
相对定位布局:
relx 设置距离左上角的水平长度(取值0~1)
rely 设置距离左上角的垂直高度(取值0~1)
relwidth 设置组件所占据的宽度(取值0~1)
relheight 设置组件所占据的宽度(取值0~1)
以上属性设置都是相对于界面宽度或者高度的百分比,可以根据界面的带下改变而改变~!
place()方式 ->定位摆放方法(推荐)----绝对位置----
#导入模块
import tkinter #创建主窗口对象
root = tkinter.Tk()
#大小
root.minsize(500,500) #place()方式 ->定位摆放方法(推荐)----绝对位置----===========================
#创建组件
btn1 = tkinter.Button(root,text = '按钮1')
btn1.place(x = 100 ,y = 20,width= 50,height = 50) #创建组件
btn2 = tkinter.Button(root,text = '按钮2')
btn2.place(x = 200 ,y = 50,width = 300,height = 30) #加入消息循环
root.mainloop()
place()方式 ->定位摆放方法(推荐)----相对位置----
#导入模块
import tkinter #创建主窗口对象
root = tkinter.Tk()
#大小
root.minsize(500,500) #place()方式 ->定位摆放方法(推荐)----相对位置----===========================
#创建组件
btn1 = tkinter.Button(root,text = '按钮1')
btn1.place(relx = 0.2,rely = 0.1,relwidth = 0.1,relheight = 0.1) #加入消息循环
root.mainloop()
tkinter组件:Button 按钮的样式
Label:标签控件,可以显示文本
win:主窗口
text:显示的文本内容
bg:背景颜色
fg:字体颜色
font:设置字体属性
wraplength:指定text文本中多款之后进行换行
anchor:文本显示的位置 n北 e东 s南 w西 center居中 ne se sw nw
justify:设置换行之后的对齐方式
import tkinter
root = tkinter.Tk() #大小
root.minsize(500,500)
''' #绝大部分尺寸的默认单位是像素
btn1 = tkinter.Button(root,text='尺寸')
btn1.pack(ipadx = 100, ipady = 20)
''' ''' #坐标系(提示: 禁止同时使用两种布局)
btn2 = tkinter.Button(root,text='坐标系')
btn2.place(x = 100, y = 20) ''' #颜色:
#颜色单词
btn3 = tkinter.Button(root,text='颜色',bg='gold')
btn3.pack() #hex颜色模式 #红色绿色蓝色 0-255 ->> 使用十六进制
btn4 = tkinter.Button(root,text='颜色',bg='#ff0000')
btn4.pack() #字体
btn5 = tkinter.Button(root,text='字体',font = ('黑体',40,'bold','italic'))
btn5.pack() #锚点
btn6 = tkinter.Button(root,text='锚点',anchor='sw')
btn6.pack(ipadx = 20, ipady = 20) # 三维效果
btn7 = tkinter.Button(root,text='',relief= tkinter.FLAT)
btn7.pack() #位图
btn8 = tkinter.Button(root,text='位图',bitmap = 'question')
btn8.pack() #鼠标样式
btn9 = tkinter.Button(root,text='鼠标',cursor='heart')
btn9.pack(ipadx=30,ipady=20) #图片设置
#将图片设置为图像对象
long = tkinter.PhotoImage(file = 'long.gif')
btn10 = tkinter.Button(root,text='图片',image=long)
btn10.pack() #加入消息循环
root.mainloop()
import tkinter # 创建一个主窗口
win = tkinter.Tk() # 设置 标题
win.title("python-13") # 设置窗口大小和位置
win.geometry("500x500+200+50") """
Label:标签控件,可以显示文本
win:主窗口
text:显示的文本内容
bg:背景颜色
fg:字体颜色
font:设置字体属性
wraplength:指定text文本中多款之后进行换行
anchor:文本显示的位置 n北 e东 s南 w西 center居中 ne se sw nw
justify:设置换行之后的对齐方式
"""
label = tkinter.Label(win,
text = "this is a python test",
bg = "red",
fg = "yellow",
font = ("黑体",25),
height = 5,
width = 10,
wraplength = 100,
# anchor = "ne",
# justify = "center"
)
label.pack() #启动主窗口
win.mainloop()
tkinter组件:画布
import tkinter
root = tkinter.Tk() #大小
root.geometry('500x500') #创建画布
canvas = tkinter.Canvas(root,bg='white')
canvas.pack() #画布中回值长方形
canvas.create_rectangle(20,20,100,100,fill='red',outline='yellow') root.mainloop()
tkinter组件:复选框
import tkinter
root = tkinter.Tk() #大小
root.geometry('500x500') #创建组件
#checkbutton = tkinter.Checkbutton(root, text='同意此协议') #设置文本方法1 : 文本不变 #设置显示内容tkinter变量
text = tkinter.StringVar() #设置内容
text.set('同意嫁给你') #设置复选框勾选与否的值
result = tkinter.IntVar() #设置操作checkbutton的方法
def func():
print(result.get()) checkbutton = tkinter.Checkbutton(root,textvariable=text,variable=result,command=func,onvalue=66,offvalue=77)
checkbutton.pack() root.mainloop()
tkinter组件:文本框
import tkinter
root = tkinter.Tk() #大小
root.geometry('500x500') #创建组件
#用户名
username = tkinter.Entry(root,width=50,bg='yellow',fg='red')
username.pack() #密码
password = tkinter.Entry(root,show='*')
password.pack() root.mainloop()
""""""
"""
复选框
""" import tkinter # 创建一个主窗口
win = tkinter.Tk() # 设置 标题
win.title("python-13") # 设置窗口大小和位置
win.geometry("500x500+200+50") def func():
message = ""
if res1.get():
message += "张三\n"
if res2.get():
message += "李四\n"
if res3.get():
message += "王五\n" text.delete(0.0,tkinter.END)
text.insert(tkinter.INSERT,message) res1 = tkinter.BooleanVar()
check1 = tkinter.Checkbutton(win,text = "张三",variable = res1)
check1.pack() res2 = tkinter.BooleanVar()
check2 = tkinter.Checkbutton(win,text = "李四",variable = res2)
check2.pack() res3 = tkinter.BooleanVar()
check3 = tkinter.Checkbutton(win,text = "王五",variable = res3)
check3.pack() text = tkinter.Text(win,width = 50,height = 20)
text.pack() button = tkinter.Button(win,text = "submit",width = 10,height = 5,command = func)
button.pack() #启动主窗口
win.mainloop() """"""
"""
复选框
""" import tkinter # 创建一个主窗口
win = tkinter.Tk() # 设置 标题
win.title("python-13") # 设置窗口大小和位置
win.geometry("500x500+200+50") def func():
message = ""
if res1.get():
message += "张三\n"
if res2.get():
message += "李四\n"
if res3.get():
message += "王五\n" text.delete(0.0,tkinter.END)
text.insert(tkinter.INSERT,message) res1 = tkinter.BooleanVar()
check1 = tkinter.Checkbutton(win,text = "张三",variable = res1)
check1.pack() res2 = tkinter.BooleanVar()
check2 = tkinter.Checkbutton(win,text = "李四",variable = res2)
check2.pack() res3 = tkinter.BooleanVar()
check3 = tkinter.Checkbutton(win,text = "王五",variable = res3)
check3.pack() text = tkinter.Text(win,width = 50,height = 20)
text.pack() button = tkinter.Button(win,text = "submit",width = 10,height = 5,command = func)
button.pack() #启动主窗口
win.mainloop()
tkinter组件:框架
import tkinter root = tkinter.Tk() #大小
root.geometry('500x500') #创建框架1
frame1 = tkinter.Frame(root,bg='red',width=500,height=100)
frame1.pack(side='top') #框架1中横向摆放
btn1 = tkinter.Button(frame1,text='按钮')
btn1.pack(side='left',padx=20) btn2 = tkinter.Button(frame1,text='按钮')
btn2.pack(side='left',padx=20) btn3 = tkinter.Button(frame1,text='按钮')
btn3.pack(side='left',padx=20) #创建框架2
frame2 = tkinter.Frame(root,bg='green',width=500,height=100)
frame2.pack(side='top') btn4 = tkinter.Button(frame2,text='按钮')
btn4.pack(side='left',padx=20) btn5 = tkinter.Button(frame2,text='按钮')
btn5.pack(side='left',padx=20) btn6 = tkinter.Button(frame2,text='按钮')
btn6.pack(side='left',padx=20)
root.mainloop()
tkinter组件:labelframe框架
import tkinter
root = tkinter.Tk() #大小
root.geometry('500x500') #创建组件
labelframe = tkinter.LabelFrame(root,text='四大美女')
labelframe.pack(ipadx = 100) #讲其他组件摆放到labelframe中
btn1 = tkinter.Button(labelframe,text='貂蝉')
btn1.pack() btn1 = tkinter.Button(labelframe,text='杨玉环')
btn1.pack() btn1 = tkinter.Button(labelframe,text='西施')
btn1.pack() btn1 = tkinter.Button(labelframe,text='王昭君')
btn1.pack() root.mainloop()
tkinter组件:标签
import tkinter # 标签
root = tkinter.Tk() #大小
root.geometry('500x500') #创建组件
label = tkinter.Label(root,text='这是一个标签',fg = 'red')
label.pack() root.mainloop()
tkinter组件:列表盒子(列表框)
import tkinter # 列表盒子 root = tkinter.Tk() #大小
root.geometry('500x500') #设置listbox的内容
names = ('杨巅峰','鲍菊花','刘产','杜子腾','熊初墨') #将数据转换为tkinter的字符串变量
students = tkinter.StringVar(value=names) #创建组件
listbox = tkinter.Listbox(root,listvariable=students)
listbox.pack() root.mainloop()
tkinter组件:菜单栏
import tkinter #菜单 root = tkinter.Tk() #大小
root.geometry('500x500') #1.创建主菜单
bigmenu = tkinter.Menu(root)
#2.创建子菜单
filemenu = tkinter.Menu(bigmenu,tearoff=0)
#子菜单可以添加功能
filemenu.add_command(label='打开文件')
filemenu.add_command(label='保存文件') filemenu.add_separator()
filemenu.add_command(label='另存为文件')
filemenu.add_command(label='导出文件')
filemenu.add_command(label='退出') #3.将子菜单加入子菜单
bigmenu.add_cascade(label='文件',menu=filemenu) #2.创建子菜单
editmenu = tkinter.Menu(bigmenu)
#3.将子菜单加入子菜单
bigmenu.add_cascade(label='编辑',menu=editmenu) #4.将主菜单加入界面 root.config(menu=bigmenu) root.mainloop()
tkinter组件:option菜单(列表菜单)
import tkinter #option菜单 root = tkinter.Tk() #大小
root.geometry('500x500') #创建变量接收结果
result = tkinter.StringVar()
result.set('请选择问题')
#创建组件
optionmenu = tkinter.OptionMenu(root,result,'你的初恋是谁','你的初中老师是谁','你的初吻给了谁')
optionmenu.pack() root.mainloop()
tkinter组件:按钮菜单
import tkinter #按钮菜单 root = tkinter.Tk() #大小
root.geometry('500x500') #创建组件
menubutton = tkinter.Menubutton(root,text='性别')
menubutton.pack() sex = tkinter.StringVar()
#添加选项
menu = tkinter.Menu(menubutton,tearoff=0)
menu.add_radiobutton(label='男',variable=sex)
menu.add_radiobutton(label='女',variable=sex) #将菜单配置到组件
menubutton.config(menu=menu)
root.mainloop()
tkinter组件:划分窗口
import tkinter # 划分窗口 root = tkinter.Tk() #大小
root.geometry('500x500') #创建组件 orient = 'vertical'
panedwindow = tkinter.PanedWindow(root,orient = 'horizontal') #添加组件
btn1 = tkinter.Button(panedwindow,text='按钮1112222')
btn2 = tkinter.Button(panedwindow,text='按钮2') panedwindow.add(btn1)
panedwindow.add(btn2) panedwindow.pack(fill = 'both',expand='yes') root.mainloop()
tkinter组件:单选框
import tkinter
root = tkinter.Tk() #大小
root.geometry('500x500') # 创建组件
sex = tkinter.StringVar() radio1 = tkinter.Radiobutton(root,text='男',variable=sex,value='man')
radio1.pack() radio2 = tkinter.Radiobutton(root,text='女',variable=sex,value='woman')
radio2.pack() root.mainloop()
tkinter组件:滚动条1
import tkinter #进度条
root = tkinter.Tk() #大小
root.geometry('500x500') #创建组件
scale = tkinter.Scale(root,orient='horizontal',from_=50,to= 80,resolution=0.5)
scale.pack() root.mainloop()
tkinter组件:滚动条2
import tkinter #滚动条 root = tkinter.Tk() #大小
root.geometry('500x500') #简单的滚动条
scroll = tkinter.Scrollbar(root)
scroll.pack(fill = 'y', side = 'right') root.mainloop()
tkinter组件:限定类型输入框
import tkinter # 限定类型的输入框
root = tkinter.Tk() #大小
root.geometry('500x500') spinbox = tkinter.Spinbox(root,from_ = 0, to=120,increment = 0.5)
spinbox.pack() root.mainloop()
tkinter组件:多行文本框
import tkinter # 多行文本输入框 root = tkinter.Tk() #大小
root.geometry('500x500') text = tkinter.Text(root,width = 50,height= 10)
text.pack() #设置值
text.insert('0.0','你好啊,小姐姐')
root.mainloop()
tkinter组件:弹出新窗口
import tkinter
root = tkinter.Tk() #大小
root.geometry('500x500') #聊天函数 def talk():
#新窗口
newroot = tkinter.Toplevel() # 弹出新窗口
btn = tkinter.Button(root,text='点击开始对话',command = talk)
btn.pack() root.mainloop()
tkinter组件:消息对话框
#messagebox 消息对话框
import tkinter
#导入消息对话框子模块
import tkinter.messagebox #创建主窗口
root = tkinter.Tk()
#设置大小
root.minsize(300,300) '''
#声明函数
def okcancel():
#弹出对话框
result = tkinter.messagebox.askokcancel(title = 'okcancel',message = '先生,反已经做好了,要吃饭码?')
print(result) #添加按钮
btn1 = tkinter.Button(root,text = 'okcancel',command = okcancel)
btn1.pack() #声明函数
def question():
# 弹出对话框
result = tkinter.messagebox.askquestion(title = 'question',message = '你是男人吗?')
print(result)
#添加按钮
btn2 = tkinter.Button(root,text = 'question',command = question)
btn2.pack() #声明函数
def retrycancel():
# 弹出对话框
result = tkinter.messagebox.askretrycancel(title = 'retrycancel',message = '女生拒绝了你,你要继续追码??')
print(result)
#添加按钮
btn3 = tkinter.Button(root,text = 'retrycancel',command = retrycancel)
btn3.pack() #声明函数
def yesno():
# 弹出对话框
result = tkinter.messagebox.askyesno(title = 'yesno',message = '你喜欢日本人吗?')
print(result)
#添加按钮
btn4 = tkinter.Button(root,text = 'yesno',command = yesno)
btn4.pack() #声明函数
def error():
# 弹出对话框
tkinter.messagebox.showerror(title = '出错了',message = '你的年龄不符合要求!')
#添加按钮
btn5 = tkinter.Button(root,text = 'error',command = error)
btn5.pack() #声明函数
def warning():
# 弹出对话框
tkinter.messagebox.showwarning(title = '警告',message = '18岁以下禁止进入')
#添加按钮
btn6 = tkinter.Button(root,text = 'warning',command = warning)
btn6.pack()
''' #声明函数
def info():
# 弹出对话框
tkinter.messagebox.showinfo(title = '信息提示',message = '1区王者已上线!')
#添加按钮
btn7 = tkinter.Button(root,text = 'info',command = info)
btn7.pack() #加入消息循环
root.mainloop()
tkinter组件:消息输出框
#导入tkinter
import tkinter
#导入子模块
import tkinter.simpledialog #创建主界面
root = tkinter.Tk()
#设置大小
root.minsize(300,300) '''
def askname():
result = tkinter.simpledialog.askstring(title = '获取信息',prompt = '请输入用户名',initialvalue = '匿名')
print(result) #添加按钮
btn1 = tkinter.Button(root,text = '获取用户名',command = askname)
btn1.pack() def askage():
result = tkinter.simpledialog.askinteger(title = '获取信息',prompt = '请输入年龄',initialvalue = 18)
print(result) #添加按钮
btn2 = tkinter.Button(root,text = '获取年龄',command = askage)
btn2.pack()
''' def askheight():
result = tkinter.simpledialog.askfloat(title = '获取信息',prompt = '请输入身高(单位:米)',initialvalue = 0)
print(result) #添加按钮
btn3 = tkinter.Button(root,text = '获取身高',command = askheight)
btn3.pack() root.mainloop()
tkinter组件:文件选择框
#导入tkinter
import tkinter
#导入子模块
import tkinter.filedialog #help(tkinter.filedialog)
'''
askdirectory(**options)
获取一个文件夹的路径 askopenfile(mode='r', **options)
打开文件获取单个文件指针,具有open()的作用 askopenfiles(mode='r', **options)
打开文件获取多个文件指针,具有open()的作用 askopenfilename(**options)
选择单个文件,获取其路径 askopenfilenames(**options)
选择多个文件,获取其路径 Returns a list of filenames or empty list if
cancel button selected asksaveasfile(mode='w', **options)
Ask for a filename to save as, and returned the opened file asksaveasfilename(**options)
选择保存文件的路径 ''' #主界面
root = tkinter.Tk()
#设置大小
root.minsize(300,300) '''
#定义函数
def filename():
path = tkinter.filedialog.askopenfilename()
print(path) #添加按钮触发
btn1 = tkinter.Button(root,text = 'filename',command = filename)
btn1.pack()
''' '''
#定义函数
def filenames():
paths = tkinter.filedialog.askopenfilenames()
print(paths) #添加按钮触发
btn2 = tkinter.Button(root,text = 'filenames',command = filenames)
btn2.pack()
''' '''
#定义函数
def file():
fp = tkinter.filedialog.askopenfile(mode = 'r')
print(fp) #添加按钮触发
btn3 = tkinter.Button(root,text = 'file',command = file)
btn3.pack()
''' '''
#定义函数
def dir():
path = tkinter.filedialog.askdirectory()
print(path) #添加按钮触发
btn4 = tkinter.Button(root,text = 'dir',command = dir)
btn4.pack()
''' '''
#定义函数
def saveas():
path = tkinter.filedialog.asksaveasfilename()
print(path) #添加按钮触发
btn5 = tkinter.Button(root,text = 'saveas',command = saveas)
btn5.pack()
''' #参数设定
#定义函数
def filename():
path = tkinter.filedialog.askopenfilename(initialdir = 'c:/',initialfile = 'abc.exe',title = '打开你心意的文件',filetypes = (('可执行文件','*.exe'),('python file','*.py'),('所有文件','*.*')))
print(path) #添加按钮触发
btn1 = tkinter.Button(root,text = 'filename',command = filename)
btn1.pack() root.mainloop()
tkinter组件:颜色组件
#导入模块
import tkinter
#导入子模块
import tkinter.colorchooser #主界面
root = tkinter.Tk()
root.minsize(300,300) #函数
def color():
result = tkinter.colorchooser.askcolor(color = '#ff9900')
print(result)
#设置界面背景颜色
root['bg'] = result[1] #添加按钮
btn = tkinter.Button(root,text = '选择颜色',command = color)
btn.pack() root.mainloop()
tkinter组件:键盘-鼠标 事件
#事件学习:
#1.事件绑定函数
#2.事件类型
#3.事件对象 '''
以按钮为例:
1.为按钮添加一个【点击时候】的操作 ->事件类型
2.使用按钮的【command参数指定类函数】 ->事件绑定函数
3.按钮操作过程中的信息 ->事件对象
''' #1.事件绑定函数(3个)
'''
1.组件.bind('事件类型',事件函数)
为一个组件绑定一个操作
2.组件.bind_class('组件类型','事件类型',事件函数)
为一类组件绑定一个操作
组件类型就是创建组件的方法名 例如按钮组件:Button
3.组件.bind_all('事件类型',事件函数)
为所有组件绑定一个操作(所有操作都会当作对主界面的操作)
''' #2.事件类型
'''
鼠标事件类型
<Button-1> 按下了鼠标左键 <ButtonPress-1>
<Button-2> 按下了鼠标中键 <ButtonPress-2>
<Button-3> 按下了鼠标右键 <ButtonPress-3>
<Enter> 鼠标进入组件区域
<Leave> 鼠标离开组件区域
<ButtonRelease-1> 释放了鼠标左键
<ButtonRelease-2> 释放了鼠标中键
<ButtonRelease-3> 释放了鼠标右键
<B1-Moion> 按住鼠标左键移动
<B2-Moion> 按住鼠标中键移动
<B3-Moion> 按住鼠标右键移动
<Double-Button-1> 双击鼠标左键
<Double-Button-2> 双击鼠标中键
<Double-Button-3> 双击鼠标右键
<MouseWheel> 滚动鼠标滚轮
键盘事件类型
<KeyPress> 表示任何键盘按下
<KeyPress-A> 表示按下键盘A键 A可以设置为其他的按键
<Alt-KeyPress-A> 表示同时按下Alt和A键 A可以设置为其他的按键
<Control-KeyPress-A> 表示同时按下Ctrl和A键 A可以设置为其他的按键
<Shift-KeyPress-A> 表示同时按下Shift和A键 A可以设置为其他的按键
<Double-KeyPress-A> 表示双击键盘A键 A可以设置为其他的按键
<Lock-KeyPress-A> 表示开启大写之后键盘A键 A可以设置为其他的按键
<Alt-Control-KeyPress-A> 表示同时按下alt+Ctrl和A键 A可以设置为其他的按键 注意:键盘事件除了entry和text组件其他组件的事件最好绑定在主界面上
窗口和组件相关事件类型
Activate 当中组件由不可以用变为可用时 针对于state的变值
Deactivate 当组件由可用变为不可用时触发
Configure 当组件大小发生变化时触发
Destory 当组件销毁时触发
FocusIn 当组件获取焦点时触发 针对于Entry和Text有效
Map 当组件由隐藏变为显示时触发
UnMap 当组件由显示变为隐藏时触发
Perproty 当窗口属性发生变化时触发 '''
#3.事件对象
'''
x,y 当前触发事件时鼠标相对触发事件的组件的坐标值
x_root,y_root 当前触发事件时鼠标相对于屏幕的坐标值
char 获取当前键盘事件时按下的键对应的字符
keycode 获取当前键盘事件时按下的键对应的的ascii码
type 获取事件的类型
num 获取鼠标按键类型 123 左中右
widget 触发事件的组件
width/height 组件改变之后的大小和configure()相关 ''' #事件绑定的案例1:
import tkinter root = tkinter.Tk()
root.minsize(300,200) #单行文本
entry = tkinter.Entry(root)
entry.pack()
#事件函数
def changered(eventobj):
eventobj.widget['bg'] = 'red' def changegreen(eventobj):
eventobj.widget['bg'] = 'green' #事件绑定
entry.bind('<FocusIn>',changered) #entry获取焦点组件 变红
entry.bind('<FocusOut>',changegreen)#entry失去焦点组件 变绿 #注意:通过绑定函数操作,对应的事件函数,必须有形参接受事件对象。
# 事件函数必须在绑定之间定义 entry2 = tkinter.Entry(root)
entry2.pack() #键盘事件 #变红色
def changer(eventobj):
print('#@@@@@@@@@@@@@@')
eventobj.widget['bg'] = 'red' #变绿色
def changeg(eventobj):
print('#@@@@@@@@@@@@@@')
eventobj.widget['bg'] = 'green' root.bind('<Control-KeyPress-r>',changer)
root.bind('<Control-KeyPress-R>',changer) root.bind('<Control-KeyPress-g>',changeg)
root.bind('<Control-KeyPress-G>',changeg) root.mainloop()
tkinter组件:鼠标事件1
import tkinter root = tkinter.Tk()
root.minsize(300,300) #按钮1
btn1 = tkinter.Button(root,text = '')
btn1.place(x = 20,y = 20,width = 40,height = 40) #按钮1
btn2 = tkinter.Button(root,text = '')
btn2.place(x = 80,y = 20,width = 40,height = 40) #按钮1
btn3 = tkinter.Button(root,text = '')
btn3.place(x = 140,y = 20,width = 40,height = 40) #按钮1
btn4 = tkinter.Button(root,text = '')
btn4.place(x = 20,y = 80,width = 40,height = 40) #按钮1
btn5 = tkinter.Button(root,text = '')
btn5.place(x = 80,y = 80,width = 40,height = 40) #按钮6
btn6 = tkinter.Button(root,text = '')
btn6.place(x = 140,y = 80,width = 40,height = 40) def changebg(e):
e.widget['bg'] = 'green' #绑定按钮鼠标进入有事件
btn1.bind_class('Button','<Enter>',changebg) def changebg(e):
e.widget['bg'] = 'yellow' #绑定按钮鼠标离开有事件
btn1.bind_class('Button','<Leave>',changebg) root.mainloop()
tkinter组件:鼠标事件2
import tkinter root = tkinter.Tk()
root.minsize(300,300) #按钮
btn = tkinter.Button(root,text = '##########')
btn.pack() #输入框
entry = tkinter.Entry(root)
entry.pack() #文本
text = tkinter.Text(root,width = 20,height = 5)
text.pack() #函数
def changeentry(e):
entry['bg'] = 'cyan' #事件绑定
btn.bind_all('<Button-1>',changeentry) root.mainloop()
gui - tkinter 开发的更多相关文章
- [GUI]界面开发类库-Ribbon风格 [转]
[GUI]界面开发类库 如果我们不十分清楚需要什么样的界面风格及如何实现,请按以下两个步骤操作: (1) 搞清楚这种风格叫什么名字 (2) 查现有的比较著名的GUI库是否已有相 ...
- Python GUI - Tkinter tkMessageBox
Python GUI - Tkinter tkMessageBox: tkMessageBox模块用于显示在您的应用程序的消息框.此模块提供了一个功能,您可以用它来显示适当的消息 tkMess ...
- GUI程序开发的流程(随时删除的源码)
1.继承JFrame 2.定义需要的组件 3.创建组件 4.设置布局管理器 5.添加组件 6.显示窗体 --------------------------------------------- 小代 ...
- 嵌入式系统WinCE下应用程序GUI界面开发【转】
嵌入式系统WinCE下应用程序GUI界面开发 ByToradex 秦海 本文旨在介绍嵌入式系统在Wince下进行GUI应用程序开发可以选择的不同GUI开发框架(Framework),目前最常用的几种方 ...
- Tkinter开发第一个桌面程序HelloWorld
在Python3中是tkinter,Python2中是Tkinter Tkinter是Python 官方承认的标准 GUI 方案(de-facto standard),因为是Python自带安装,决定 ...
- Python GUI - tkinter
目录: Tkinter 组件 标准属性 几何管理 代码实例: 1. Label & Button 2. Entry & Text 3.Listbox列表 4.Radiobutton单选 ...
- 客户端GUI程序开发漫谈
这篇文章包含了这个领域的很多开源项目的介绍,还有我多年来的心血和汗水 去年夏天的时候,我用QT做了一个小工具 后来还用QT做了流程设计器 我把程序分享给飞扬青云之后,他甚至搞出来一套QT的皮肤来 说 ...
- [GUI]界面开发类库
如果我们不十分清楚需要什么样的界面风格及如何实现,请按以下两个步骤操作: (1) 搞清楚这种风格叫什么名字 (2) 查现有的比较著名的GUI库是否已有相应的实现方案. (3) ...
- 2013级C++第13周(春)项目——继承的进一步话题与GUI应用开发
课程首页在:http://blog.csdn.net/sxhelijian/article/details/11890759,内有完整教学方案及资源链接 第一部分 程序阅读:阅读以下类的定义,请说出在 ...
随机推荐
- nodejs 基础篇整合
nodeJs 基础篇整合 最近有朋友也想学习nodeJs相关方面的知识,如果你是后端想接近前端,node作为一门跑在服务端的JS语言从这里入门再好不过了.如果你正好喜欢前端,想走的更高,走的更远.no ...
- EASYARM-IMX283 nfs启动内核和根文件系统
EASYARM-IMX283(以下简称IMX283)默认采用从nand flash启动,但是在开发过程中因为要频繁的替换内核,我们更倾向于从nfs启动. 先看看IMX283中uboot中默认采用的启动 ...
- hiho一下 第四十七周 拓扑排序一 【静态数组链式前向星存储结构实现 + 拓扑跳出 】
题目1 : 拓扑排序·一 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 由于今天上课的老师讲的特别无聊,小Hi和小Ho偷偷地聊了起来. 小Ho:小Hi,你这学期有选什么 ...
- python读取文件的几种方式
http://www.cnblogs.com/nkwy2012/p/6023710.html
- HDU 2643 Rank:第二类Stirling数
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2643 题意: 有n个个选手参赛,问排名有多少种情况(可以并列). 题解: 简化问题: 将n个不同的元素 ...
- centos6.3 安装python2.7.3
现在比较流行python2.7版本,centos6.3的默认版本是2.6.6,所以需要安装下2.7版本 1.下载安装python2.7 #wget http://www.python.org/ftp/ ...
- python 3 - 写一个自动生成密码文件的程序
1.你输入几,文件里面就给你产生多少条密码 2.密码必须包括,大写字母.小写字母.数字.特殊字符 3.密码不能重复 4.密码都是随机产生的 5.密码长度6-11 import string,rando ...
- Elasticsearch: Five Things I was Doing Wrong
Elasticsearch: Five Things I was Doing Wrong Update: Also check out my series on scaling Elasticsear ...
- 机器学习 F1-Score, recall, precision
在机器学习,模式识别中,我们做分类的时候,会用到一些指标来评判算法的优劣,最常用的就是识别率,简单来说,就是 Acc=Npre/Ntotal 这里的 Npre表示预测对的样本数,Ntotal表示测试集 ...
- 在Asterisk CLI里面采用originate发起一个呼叫
Asterisk cli下面可以执行很多命令,originate的用途是发起一个呼叫然后连接到指定的应用或上下文. 跟.call呼叫文件和AMI管理接口里的外呼功能一样,有两种语法格式: 呼叫成功转应 ...