上一篇链接:https://blog.csdn.net/iMlosedog/article/details/102826728
在这一篇博客中,我们要创建一个窗体,来进行图片与文件加的选择,并将上一篇的功能整合进来,设计的内容主要有tkinter的使用。菜鸟教程相关内容链接:https://www.runoob.com/python/python-gui-tkinter.html
参考博客:
python中tkinter库的详细用法及简单案例(图形化界面)https://blog.csdn.net/t8116189520/article/details/80137916
1.创建窗体与基本布局
使用Python3 版本,t要小写,所以插入代码为:
import tkinter as tk import tkinter.filedialog as tk_f #文件读取 import tkinter.messagebox #消息提醒
tkinter中创建各组件都比较简单,下面直接给出代码,针对具体函数进行说明
top = tk.Tk()#创建窗体
m_text = tk.Text(top)#创建文本框
#初始化窗口
top.title('图片识别测试')
top.geometry('640x600+200+100')#设置窗口大小640x600 和位置
#标签
label_2 = tk.Label(top, text='请选择文件', width=10, height=2)#text为标签显示内容
label_2.pack()#插入窗体中
label_2.place(x=30,y=26)#设置位置。此处要先插入,再设置位置
创建文字框entry时,关联一个string字符串,可以用set()和get()函数去设置和获取控件中的值,以动态显示内容
#文字框
m_str_var = tk.StringVar()
text1 = Entry(top, bg='white', width=45,textvariable=m_str_var)
text1.pack()
text1.place(x=100, y=30)
创建按钮,参数中command绑定一个点击函数
#选择图片按钮
def xz_files_button():
b1 = tk.Button(top, text="选择图片", width='10', command=xz_files)#不要加括号,否则会直接运行
b1.pack()#先pack ,否则位置不对
b1.place(x=430,y=26)
#选择文件夹按钮
def xz_fold_button():
b2 = tk.Button(top, text="选择文件夹", width='10', command=xz_fold)
b2.pack()
b2.place(x=530, y=26)
#图片识别信息返回区域
m_text.pack()
m_text.place(x=40, y=100)
#文本框滚动条
m_scrl = tk.Scrollbar(top)
m_scrl.place(x=400,y=100)
m_scrl.pack(side=tkinter.RIGHT,fill=tk.Y)
m_text.configure(yscrollcommand=m_scrl.set)#绑定文本框
m_scrl['command'] = m_text.yview
top.mainloop()
创建完成后布局如下:
2.功能实现
选择一个或者多个文件代码如下,使用askopenfilenames()函数
参数filetypes 规定选择文件的类型名称和后缀
filenames = tk_f.askopenfilenames(title='选择图片 ' , filetypes=[('图片(JPG)', '*.jpg'), ('All Files', '*')])
选择整个文件夹代码如下,使用askdirectory(函数)
foldname=tk_f.askdirectory(title='选择文件 ')
3.完整代码如下
#!/usr/bin/python
# -*- coding: UTF-8 -*-
#千万别把Python的GUI程序命名成tkinter,或者把什么其他的程序命名成tkinter,只要命名成这个,一调用就会报错。
#以下为图片识别模块。。。。。。。。。。。。。。。。。。。。。。。
from aip import AipImageClassify #pip baidu_aip
import cv2 #pip openCV-python
import base64
import os
#以下为GUI模块。。。。。。。。。。。。。。。。。。。。。。。。。。
import tkinter as tk
import tkinter.filedialog as tk_f #文件读取
import tkinter.messagebox #消息提醒
from tkinter import *
#以下为图片显示模块。。。。。。。。。。。。。。。。。。。。。。。
from PIL import Image, ImageTk #pip pillow
# 定义百度AI常量
APP_ID = '17639555'
API_KEY = 'VAyOaD7kGqGBQjxfhqlkC60v'
SECRET_KEY = '50qmbr44XzkG5vekUYbcSsZ4rqGN4SwU'
# 初始化AipImageClassify对象
client = AipImageClassify(APP_ID, API_KEY, SECRET_KEY)
# 定义参数变量
options={ "baike_num":1 }
top = tk.Tk()
m_text = tk.Text(top)
# 功能:传入一个有 文件绝对路径组成的list,遍历进行图片识别并进行展示
def showresult (files):
for pic in files: #pic为图片名称,不包含路径
#print("图片展示:", pic)
filePath = pic
fp=open(filePath, 'rb')
result = client.advancedGeneral(fp.read(), options)
#img = cv2.imread(filePath)
#cv2.imshow(pic, img)
result_num=result["result_num"]
ri=0
m_text.insert(tk.CURRENT, ' 图片 '+pic+'。。。。。。。。\n')
print("\n图片"+pic+"。。。。。")
while ri 0):
m_str_var.set(str(filenames[0])+' 等'+str(len(filenames))+'个文件')
else:
m_str_var.set(str(filenames[0]) )
tkinter.messagebox.showinfo('提示','选择的是 '+str(filenames[0])+' 等'+str(len(filenames))+'个文件,开始识别')
#进行图片识别
showresult(filenames)
else:
print("您没有选择任何文件");
tkinter.messagebox.showinfo('提示', '您没有选择任何文件')
return filenames
#选择图片按钮
def xz_files_button():
b1 = tk.Button(top, text="选择图片", width='10', command=xz_files)#不要加括号,否则会直接运行
b1.pack()#先pack ,否则位置不对
b1.place(x=430,y=26)
#选择文件夹按钮
def xz_fold_button():
b2 = tk.Button(top, text="选择文件夹", width='10', command=xz_fold)
b2.pack()
b2.place(x=530, y=26)
#传入一个图片的绝对路径,将其展示在窗口中
def image_show(img1,render):
load = Image.open(img1)#img为路径
render = ImageTk.PhotoImage(load)
print('tupian')
return render
if __name__ == "__main__":
#初始化窗口
top.title('图片识别测试')
top.geometry('640x600+200+100')#设置窗口大小640x600 和位置
#标签
label_2 = tk.Label(top, text='请选择文件', width=10, height=2)
label_2.pack()
label_2.place(x=30,y=26)
#文字框
m_str_var = tk.StringVar()
text1 = Entry(top, bg='white', width=45,textvariable=m_str_var)
text1.pack()
text1.place(x=100, y=30)
#按钮
xz_files_button()
xz_fold_button()
#图片识别信息返回区域
m_text.pack()
m_text.place(x=40, y=100)
#文本框滚动条
m_scrl = tk.Scrollbar(top)
m_scrl.place(x=400,y=100)
m_scrl.pack(side=tkinter.RIGHT,fill=tk.Y)
m_text.configure(yscrollcommand=m_scrl.set)#绑定文本框
m_scrl['command'] = m_text.yview
'''
#图片显示区
load = Image.open('timg.jpg') # img为路径,显示一个默认图片
render = ImageTk.PhotoImage(load)
img_label = tkinter.Label(image=render)
img_label.pack()
img_label.place(x=100, y=100)
'''
top.mainloop()