Python的GUI编程(TK)
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编程:
效果:
程序:
from tkinter import *
from tkinter import messagebox
from PIL import Image,ImageTk
import re #正则表达式
import requests
def butonck():
#改变lab颜色
labelx["fg"]="green"
#获取输入框值
textx=entryx.get()
#去掉字符串前后空格
textx=textx.strip()
if textx=='':
#弹出提示框
messagebox.showinfo("东东提示","输入不可为空")
else:
#字典数据
datax={
"word":textx,
"sizes":60,
"fonts":"lfc.ttf",
"fontcolor":"#000000"
}
rx=requests.post("http://www.uustv.com/",data=datax)
rx.encoding="utf-8"
htmlx=rx.text #网站源码
zz='<div class="tu">.*?<img src="(.*?)"/></div>'#括号里的.*?表示要取的值
#取图片地址
imagex=re.findall(zz,htmlx)
#取图片数据
imagedatax=requests.get("http://www.uustv.com/"+imagex[0]).content
#打开文件
ff=open('{}.gif'.format(textx),"wb")
#写图片数据
ff.write(imagedatax)
#
bmx=ImageTk.PhotoImage(file='{}.gif'.format(textx))
lab2=Label(rview,image=bmx)
lab2.bm=bmx
lab2.grid(row=2,columnspan=2)
#创建窗口
rview=Tk()
#标题
rview.title("东小东标题党")
#窗口大小 长高用小写x隔开
#rview.geometry("600x300")
#窗口基于屏幕的坐标 +x轴+y轴
rview.geometry("+500+200")
#创建lab标签
labelx=Label(rview,text="签名",fg="red",font=("宋体",30))
#显示lab标签 网格布局 sticky=W #左对齐 E为右对齐 默认为中间对齐
labelx.grid(row=0,column=0)
#创建输入框
entryx=Entry(rview,font=("宋体",20))
#显示输入框
entryx.grid(row=0,column=1)
#创建按钮
buttonx=Button(rview,text="确定",font=("宋体",30),command=butonck)
#显示按钮
buttonx.grid(row=1,column=2)
#显示后改变按钮属性
#buttonx["width"]=2 #消息循环 显示窗口
rview.mainloop()
其他补充:
按钮标签:
设置是否可点击buttonx.config(state=DISABLED)//不可按 NORMAL为正常
改变文字:buttonx["text"]="改变文字"
Lab标签:
改变文字内容:labx.config(text="改变文字")
改变文字样式:labx.config(font=("xx",100,"bold")) #字体,大小,加粗
获取标签上的内容:constr=labx["text"]
对齐方式为左上角:Label(rootv,text="123",justify=LEFT,font=("宋体",19),width=15,height=6,anchor='nw')
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>事件
获取鼠标点击坐标实现:
关闭程序是出现弹出提示框:
子容器:
from tkinter import *
#创建窗口
rview=Tk()
#标题
rview.title("东小东")
#窗口基于屏幕的坐标 +x轴+y轴
rview.geometry("+500+200")
#创建lab标签
labelx=Label(rview,text="父容器Lab",font=("宋体",30))
#显示lab标签 网格布局 sticky=W #左对齐 E为右对齐 默认为中间对齐
labelx.grid(row=0,column=1) #---------------------------------------------------------------------------- # 创建一个子容器,其父容器为rview
monty = LabelFrame(rview, text="== 子容器标题 ==")
monty.grid(column=0, row=0,padx=5,pady=5) #设置子容器在父容器的位置 #创建子容器里的按钮1
buttonx1=Button(monty,text="按钮1",font=("宋体",20),fg="red")
buttonx1.grid(row=0,column=0) #设置按钮在子容器的位置 #创建子容器里的按钮2
buttonx2=Button(monty,text="按钮2",font=("宋体",20),fg="green")
buttonx2.grid(row=1,column=0) #设置按钮在子容器的位置 #--------------------------------------------------------------------------- #消息循环 显示窗口
rview.mainloop()
输入框内容操作
from tkinter import * def butonck():
print(entryx.get())#输出输入框值 #创建窗口
rview=Tk()
#标题
rview.title("")
#窗口大小 长高用小写x隔开
#rview.geometry("600x300")
#创建lab标签
labelx=Label(rview,text="输入:",fg="red",font=("宋体",30))
#显示lab标签 网格布局 sticky=W #左对齐 E为右对齐 默认为中间对齐
labelx.grid(row=0,column=0)
#创建输入框默认显示
entext = StringVar()
#创建输入框
entryx=Entry(rview,font=("宋体",20),textvariable=entext)
#显示输入框
entryx.grid(row=0,column=1)
#创建按钮
buttonx=Button(rview,text="确定",font=("宋体",30),command=butonck)
#显示按钮
buttonx.grid(row=0,column=2) #-------------------------------------------------
#设置内容
entext.set('西')
#插入内容,最开始处
entryx.insert(0,'东')
#插入内容,光标位置开始
entryx.insert(INSERT,'想')
#插入内容,末尾
entryx.insert(END,'想')
#-------------------------------------------------- #消息循环 显示窗口
rview.mainloop()
文本框加滚动条实现:
from tkinter import *
#创建窗口
rview=Tk()
#标题
rview.title("东小东")
#窗口基于屏幕的坐标 +x轴+y轴
rview.geometry("+500+200")
#创建lab标签
labelx=Label(rview,text="文本框实现",font=("宋体",30))
#显示lab标签 网格布局 sticky=W #左对齐 E为右对齐 默认为中间对齐
labelx.grid(row=0,column=0) #---------------------------------------------------------------------------- # 创建一个纵向滚动的滚动条,打包到窗口右侧,铺满Y方向
scrollbar = Scrollbar(rview, orient=VERTICAL,bg="red") # orient默认为纵向
scrollbar.grid(row=2,column=0) # 打包一个文本域到窗口,y方向滚动文本的监听丢给滚动条的set函数(文本域主动关联滚动条)
#高度和宽度确定的是字符个数(win)
text = Text(rview, width=50,height=10, yscrollcommand=scrollbar.set)
text.grid(row=2,column=0) # 拉动滚动条时,改变文本域在y方向上的视图(滚动条主动关联文本域)
scrollbar.config(command=text.yview) #--------------------------------------------------------------------------- #消息循环 显示窗口
rview.mainloop()
添加操作属性:
text.delete(0.0, END)#清空文本框
text.insert(END, "追加的内容")
将opencv的图片转换到TK:
from PIL import Image, ImageTk
cv2image = cv2.cvtColor(tux, cv2.COLOR_BGR2RGBA) # 转换颜色从BGR到RGBA
current_image = Image.fromarray(cv2image) # 将图像转换成Image对象
imgx = ImageTk.PhotoImage(image=current_image)
label = Label(image=imgx)
label.image = imgx
label.grid(row=1, column=0, rowspan=4, sticky=W + E + N + S, padx=10, pady=10) # sticky=W + E + N + S 表示填充控件
opencv视频流显示在TK
通过lab的方式会出现闪烁,通过画布方式完美解决
import threading
import cv2
from tkinter import *
from PIL import Image, ImageTk
from tkinter import ttk rootv = Tk()
rootv.title("东小东") #创建lab标签
labelx=Label(rootv,text="东小东TK视频流",fg="red",font=("宋体",30))
labelx.grid(row=0,column=0) #创建一个画布
canv = Canvas(rootv,width=640,height=480,bg = 'red')
canv.grid(row=1,column=0) def show_video():
global labelvvv
vix=cv2.VideoCapture(2) #打开摄像头
#imgtk=''
while True:
ret,tu=vix.read() #ret为返回值,tu为当前帧
tu1=cv2.flip(tu,1)#图像反转,1为左右对换,-1为上下对换
cv2image = cv2.cvtColor(tu1, cv2.COLOR_BGR2RGBA)# 转换颜色从BGR到RGBA
current_image = Image.fromarray(cv2image) # 将图像转换成Image对象
imgtk = ImageTk.PhotoImage(image=current_image)#img
canv.create_image(0,0,anchor=NW,image=imgtk)#将图片添加到画布
obr = imgtk #开启线程
t1=threading.Thread(target=show_video,args=())
t1.start() rootv.mainloop()
Python的tkinter参考:http://effbot.org/tkinterbook
画布视频流:https://stackoverflow.com/questions/35319531/python-tkinter-canvas-root-after-maximum-recursion-depth-exceeded
教程参考:潭州教育
Python的GUI编程(TK)的更多相关文章
- Python笔记_第四篇_高阶编程_GUI编程之Tkinter_1.使用Python进行GUI编程的概述
1. GUI概述: GUI全称为Graphical User Interface,叫做图形用户界面,也是一种交互方式(Interaction).早期计算机使用的命令行界面(command-line i ...
- Python之GUI编程(Tkinter))
不足之处,还请海涵,请指出不足.本人发布过的文章,会不断更改,力求减少错误信息. 一.重要放在开头:模块 如出现这种错误 ModuleNotFoundError: No module named 'n ...
- Python进阶--GUI编程
一.图形用户图面(GUI编程) 1. wxpython下载和安装: 下载url: http://wxpython.org/download.php 2.创建示例GUI应用程序 : ①开始需要导入wx ...
- python中gui编程的模块之一:tkinter(python3.x中是tkinter,小写的t)
一.tkinter是python的标准gui库,tkinter是内置在python的安装包之中的,所以安装好python之后就可以import导入tkinter模块了 二.创建一个GUI程序 1.导入 ...
- 【Python】Python PYQT4 GUI编程与exe打包
本篇文章承接http://www.cnblogs.com/zhang-zhi/p/7646923.html#3807385,上篇文章描述了对文本文件的简单处理,本章节结合PYQT4实现该功能的GUI图 ...
- python之GUI编程-tkinter学习
推荐几个学习网址:https://www.cnblogs.com/shwee/p/9427975.html https://cloud.tencent.com/developer/section/13 ...
- python之GUI编程(二)win10 64位 pygame的安装
pygame的下载网址: http://www.pygame.org/download.shtml 我下载了第一个 很显然,安装的时候出现了如图中的尴尬,更改了安装目录后,在Python shell中 ...
- python之Gui编程事件绑定 2014-4-8
place() 相对定位与绝对定位 相对定位 拖动会发生变化 绝对定位不会from Tkinter import *root = Tk()# Absolute positioningButton(ro ...
- Python——PyQt GUI编程(python programming)
import sys from math import * from PyQt5.QtCore import * from PyQt5.QtGui import * from PyQt5.QtWidg ...
随机推荐
- loadrunner11 下载路径+安装+破解+汉化
下载地址:http://pan.baidu.com/s/1eQs1Ynw 1.解压安装包 2.运行“setup.exe”,点击“LoadRunner完整安装程序”开始安装,另外此安装包有许多附带组件, ...
- TJOI2010中位数
中位数 上面是题目链接. 这一题比较水. 思路非常显然. 用mid查询时,只要返回中间值就行了. 主要就是add操作. 我们肯定不能插在末尾,然后用系统快排,这样只有30分. 那么正确的操作应该是二分 ...
- C#中get和set属性的作用
c#在定义类时,通常要把类中声明的对象封装起来,使得外界不能访问这个属性.上述代码中如果去掉set部分,则外界只能读取name的值,如果去掉get部分,则只能给name赋值.这样就可以控制外界对私有属 ...
- IOS 获取系统相册和拍照使用HXPhotoPicker 返回页面时页面上移被nav遮住问题
解决: - (void)viewWillAppear:(BOOL)animated{ [super viewWillAppear:animated]; self.automaticallyAdj ...
- python0301
1 .pycharm的使用 2.格式化输出 # name = input('请输入姓名')# age = input('请输入年龄')# hobby = input('请输入爱好')# msg = ' ...
- sudo -iu [用户] 命令无法正常切换到用户目录的原因
今天干活时遇到一个问题,在sudo -iu [用户]命令执行后无法切换到用户对应的[ 用户@机器 ~$ ]命令行 .bashrc已正常配置为 if [ -f /etc/bashrc ]; then . ...
- 【翻译】从头开始写一个时间序列数据库-Writing a Time Series Database from Scratch
本文来自: https://fabxc.org/tsdb/, 如翻译有误,请纠正. 我是从事监控工作的.特别是Prometheus, 一个包含自定义的时间序列库以及集成Kuberntes的监控系统. ...
- Leetcode(三)无重复字符的最长子串
3. 无重复字符的最长子串 题目描述 给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度. 示例: 输入: "abcabcbb" 输出: 3 解释: 因为无重复字符的最 ...
- vue图片上传
之前花了两个月用vue做了一个建筑照片我的webApp,前端就我一人,负责用vue写页面对接接口,后台一个程序员负责写接口,嵌套个安卓ios的壳.搞的是风风火火,过程也是很心累,大多不在技术,在于所谓 ...
- FPGA计算中定标与位扩展的实现
我不知道名字取对没有,在FPGA计算中有时往往需要在不溢出的情况下将数扩大,从而获得更好的计算精度. 比如.在一个8位宽的系统中,将x=0000_0010,算术左移m=5位之后得到xt=0100_00 ...