TK在大多数 Unix平台、Windows平台和Macintosh系统都是预装好的,TKinter 模块是 Tk GUI 套件的标准Python接口。可实现Python的GUI编程。 Tkinter模块("Tk 接口")是python的标准Tk GUI工具包的接口.Tk和Tkinter可以在大多数的Unix平台下使用,同样可以应用在Windows和Macintosh系统里.Tk8.0的后续版本可以实现本地窗口风格,并良好地运行在绝大多数平台中。(百度百科)
一般的环境里直接import tkinter即可使用,但Ubuntu里既然没有,所以要自己安装,因为笔者Ubuntu系统里默认有python2,python3是自己后来安装的,查阅资料得到结果是tkinter安装成功后,并没有和python3成功链接,需要重新安装python3才可以。 安装:sudo apt-get install python-tk 安装:sudo apt install tk-dev 重新安装python3环境: 进入python版本解压目录:cd python3.7 命令:./configure 命令:make 命令:sudo make install
显示图片需安装pillow库 : 指定版本安装:sudo pip3 install Pillow==4.3.0
下面先用一个小爬虫程序入门python的tkinter编程:
效果:
程序: 1 from tkinter import * 2 from tkinter import messagebox 3 from PIL import Image,ImageTk 4 import re #正则表达式 5 import requests 6 def butonck(): 7 #改变lab颜色 8 labelx["fg"]="green" 9 #获取输入框值 10 textx=entryx.get() 11 #去掉字符串前后空格 12 textx=textx.strip() 13 if textx=='': 14 #弹出提示框 15 messagebox.showinfo("东东提示","输入不可为空") 16 else: 17 #字典数据 18 datax={ 19 "word":textx, 20 "sizes":60, 21 "fonts":"lfc.ttf", 22 "fontcolor":"#000000" 23 } 24 rx=requests.post("http://www./",data=datax) 25 rx.encoding="utf-8" 26 htmlx=rx.text #网站源码 27 zz='<div class="tu">.*?<img src="(.*?)"/></div>'#括号里的.*?表示要取的值 28 #取图片地址 29 imagex=re.findall(zz,htmlx) 30 #取图片数据 31 imagedatax=requests.get("http://www./"+imagex[0]).content 32 #打开文件 33 ff=open('{}.gif'.format(textx),"wb") 34 #写图片数据 35 ff.write(imagedatax) 36 # 37 bmx=ImageTk.PhotoImage(file='{}.gif'.format(textx)) 38 lab2=Label(rview,image=bmx) 39 lab2.bm=bmx 40 lab2.grid(row=2,columnspan=2) 41 #创建窗口 42 rview=Tk() 43 #标题 44 rview.title("东小东标题党") 45 #窗口大小 长高用小写x隔开 46 #rview.geometry("600x300") 47 #窗口基于屏幕的坐标 +x轴+y轴 48 rview.geometry("+500+200") 49 #创建lab标签 50 labelx=Label(rview,text="签名",fg="red",font=("宋体",30)) 51 #显示lab标签 网格布局 sticky=W #左对齐 E为右对齐 默认为中间对齐 52 labelx.grid(row=0,column=0) 53 #创建输入框 54 entryx=Entry(rview,font=("宋体",20)) 55 #显示输入框 56 entryx.grid(row=0,column=1) 57 #创建按钮 58 buttonx=Button(rview,text="确定",font=("宋体",30),command=butonck) 59 #显示按钮 60 buttonx.grid(row=1,column=2) 61 #显示后改变按钮属性 62 #buttonx["width"]=2 63 64 65 #消息循环 显示窗口 66 rview.mainloop() 其他补充:
按钮标签: 设置是否可点击buttonx.config(state=DISABLED)//不可按 NORMAL为正常 改变文字:buttonx["text"]="改变文字"
Lab标签: 改变文字内容:labx.config(text="改变文字") 改变文字样式:labx.config(font=("xx",100,"bold")) #字体,大小,加粗
grid为表格布局 lab2.grid(row=2,columnspan=2)#columnspan为跨两列,对应 rowspan为跨行 sticky=“ew”#横向占满填充
其它属性: padx和pady=10 #设置边距 bg为背景色;fg为前景色 布局默认:将页面尺寸去掉,则自动根据内容大小动态包裹 鼠标移动到此次改变箭头样式:标签.config(cursor="gumby") 对齐方式:anchor=W //W左E右 浮雕效果:relief=SUNKEN
pack布局: 标签.pack()默认为上居中随窗口移动不变 标签.pack(fill=X)#横向大小填充,内容居中 标签.pack(fill=BOTH,expand=True)#纵向大小填充,内容居中 标签.pack(fill=BOTH,expand=True)#填充全部,内容居中 标签.pack(side=LEFT) #全部向左靠
加载一张图片: imgx = PhotoImage(file='dong.gif') label = Label(image=imgx, width=20,height=20) label.image = imgx label.grid(row=1, column=1, sticky=W + E + N + S, padx=10, pady=10) #sticky=W + E + N + S 表示填充控件
可绑定的事件: 单击鼠标左键:<Button-1> #其中1为鼠标左键,2为鼠标右键,3为鼠标中键 左键移动:<B1-Motion> 左键释放:<ButtonRelease-1> 双击左键:<Double-Button-1> 进入:<Enter> 离开:<Leave> 获得光标:<FocusIn> 光标离开:<FoucusOut> 回车键:<Return>(F1,F2,F3,Delete…) 按任意键:<Key>
事件处理函数形参可用值: 输出点击的坐标:event.x event.y 如:<Button-1>事件 输出键盘按键对应的符号:event.char 如:<Key>事件
获取鼠标点击坐标实现:
关闭程序是出现弹出提示框:
子容器: 1 from tkinter import * 2 #创建窗口 3 rview=Tk() 4 #标题 5 rview.title("东小东") 6 #窗口基于屏幕的坐标 +x轴+y轴 7 rview.geometry("+500+200") 8 #创建lab标签 9 labelx=Label(rview,text="父容器Lab",font=("宋体",30)) 10 #显示lab标签 网格布局 sticky=W #左对齐 E为右对齐 默认为中间对齐 11 labelx.grid(row=0,column=1) 12 13 #---------------------------------------------------------------------------- 14 15 # 创建一个子容器,其父容器为rview 16 monty = LabelFrame(rview, text="== 子容器标题 ==") 17 monty.grid(column=0, row=0,padx=5,pady=5) #设置子容器在父容器的位置 18 19 20 #创建子容器里的按钮1 21 buttonx1=Button(monty,text="按钮1",font=("宋体",20),fg="red") 22 buttonx1.grid(row=0,column=0) #设置按钮在子容器的位置 23 24 #创建子容器里的按钮2 25 buttonx2=Button(monty,text="按钮2",font=("宋体",20),fg="green") 26 buttonx2.grid(row=1,column=0) #设置按钮在子容器的位置 27 28 #--------------------------------------------------------------------------- 29 30 #消息循环 显示窗口 31 rview.mainloop()
文本框加滚动条实现: 1 from tkinter import * 2 #创建窗口 3 rview=Tk() 4 #标题 5 rview.title("东小东") 6 #窗口基于屏幕的坐标 +x轴+y轴 7 rview.geometry("+500+200") 8 #创建lab标签 9 labelx=Label(rview,text="文本框实现",font=("宋体",30)) 10 #显示lab标签 网格布局 sticky=W #左对齐 E为右对齐 默认为中间对齐 11 labelx.grid(row=0,column=0) 12 13 #---------------------------------------------------------------------------- 14 15 # 创建一个纵向滚动的滚动条,打包到窗口右侧,铺满Y方向 16 scrollbar = Scrollbar(rview, orient=VERTICAL,bg="red") # orient默认为纵向 17 scrollbar.grid(row=2,column=0) 18 19 # 打包一个文本域到窗口,y方向滚动文本的监听丢给滚动条的set函数(文本域主动关联滚动条) 20 #高度和宽度确定的是字符个数(win) 21 text = Text(rview, width=50,height=10, yscrollcommand=scrollbar.set) 22 text.grid(row=2,column=0) 23 24 # 拉动滚动条时,改变文本域在y方向上的视图(滚动条主动关联文本域) 25 scrollbar.config(command=text.yview) 26 27 #--------------------------------------------------------------------------- 28 29 #消息循环 显示窗口 30 rview.mainloop() 添加操作属性: text.delete(0.0, END)#清空文本框 text.insert(END, "追加的内容")
将opencv的图片转换到TK: from PIL import Image, ImageTk 1 cv2image = cv2.cvtColor(tux, cv2.COLOR_BGR2RGBA) # 转换颜色从BGR到RGBA 2 current_image = Image.fromarray(cv2image) # 将图像转换成Image对象 3 imgx = ImageTk.PhotoImage(image=current_image) 4 label = Label(image=imgx) 5 label.image = imgx 6 label.grid(row=1, column=0, rowspan=4, sticky=W + E + N + S, padx=10, pady=10) # sticky=W + E + N + S 表示填充控件 Python的tkinter参考:http:///tkinterbook 教程参考:潭州教育 |
|