用Python给图像算法做个简单应用界面

以前在Windows上做界面用MFC,现在做算法都是基于Python,所以转用Python的Tkinter库来做。主要是能使用Opencv和Torch处理数据,然后在界面上显示。

效果如下:

主要包括3个板块,其余还有一些小功能:

1、显示固定的图片。或从电脑加载一张图片并显示(涉及到按钮的响应函数编写和弹窗)

2、下拉框和文本框的使用

3、进度条的使用(涉及到多线程)

Tkinter支持控件自动调整布局,但是时间比较赶就不研究了,使用固定位置布局,界面也不给调整。

控件名称

  • Buttom 按钮,软件交互功能实现
  • Label (叫什么不重要),用来显示图片或文字
  • ComboBox 下拉框,做选择
  • Entry 文本框,做文本输入
  • Progressbar 进度条,算法跑起来之后显示进度
  • LabelFrame (...),灰色的框框,模块化布局控件

代码如下:

import tkinter as tk
import tkinter.ttk as ttk
import tkinter.messagebox
import tkinter.filedialog
import cv2 as cv
from PIL import Image, ImageTk
import time
import threading

RELIEF=['flat', 'raised', 'sunken', 'solid', 'ridge', 'groove']
CURSOR=['arrow','circle','clock','cross','dotbox','exchange',
        'fleur','heart','man','mouse','pirate','plus',
        'shuttle','sizing','spider','spraycan','star','target',
        'tcross','trek','watch']

def PIL2CV(im):
    im = im[:, :, ::-1]
    return ImageTk.PhotoImage(Image.fromarray(im))

def Buttom1_CallBack():
    filename = tk.filedialog.askopenfilename() #弹出文件选择对话框
    if filename=='': #用户没有选择任何文件
        return
    new_img = cv.imread(filename)
    if new_img is None:
        tk.messagebox.showerror('抱歉', '图片加载失败!')
        return
    new_img = cv.resize(new_img, (130, 120))
    new_img = PIL2CV(new_img)
    #后面两句实现图片切换显示
    Label2.configure(image=new_img, width=130, height=120)
    Label2.image = new_img
    tk.messagebox.showinfo('提示','加载图片完成!')

def Buttom2_CallBack():
    info = Combobox1.get()
    param = Entry1.get()
    tk.messagebox.showwarning('警告', '你选择了:'+info+' '+param)

def process_code(delay):
    for i in range(100):
        Progressbar1['value'] = i+1
        root.update()
        time.sleep(delay)
    Buttom3.configure(text='开始处理', state='normal')
    tk.messagebox.showinfo('提示', '处理完成!')
    Progressbar1.configure(value=0)

def Buttom3_CallBack():
    yn = tk.messagebox.askyesno('警告','是否需要开始处理?')
    if not yn:
        return

    Buttom3.configure(text='处理中...', state='disabled') #控件失效
    delay = 0.01

    # 单独开一个线程,绑定线程函数process_code,参数后面的','很关键
    # 不开线程界面会进入处理函数死循环,用户体验不太好
    t = threading.Thread(target=process_code, args=(delay,))
    t.start()

def Buttom4_CallBack():
    global page_count
    if page_count<=0:
        page_count = 0
        return
    else:
        page_count -= 1
        Label4.configure(text='第'+str(page_count)+'页')
    return

def Buttom5_CallBack():
    global page_count
    if page_count>=100:
        page_count = 100
        return
    else:
        page_count += 1
        Label4.configure(text='第' + str(page_count) + '页')
    return

#上面是控件的响应函数
################################################################################
#下面是界面控件的布局

#主界面
root = tk.Tk()
root.title('python界面测试') #修改界面标题
root.iconbitmap('img/tm.ico') #修改界面ico
root.geometry('800x500') #设定界面尺寸 HxW
root.resizable(width=False, height=False) #不允许调整窗口大小,不固定删除此行

#添加两个板块边界框
Frame1 = tk.LabelFrame(root, height=200, width=145)
Frame1.place(x=15, y=100)
Frame2 = tk.LabelFrame(root, text="结果显示", height=400, width=620)
Frame2.place(x=170, y=5)

#添加图片显示框、加载图片框、加载图片按钮
img = cv.imread('img/title.jpg') #opencv加载图片
img = cv.resize(img, (140,70)) #图片缩放
img = PIL2CV(img) #opencv格式转pillow
Label1 = tk.Label(root, image=img) #初始化默认图片
Label1.place(x=15, y=20) #图片显示框在界面上的位置

Label2 = tk.Label(root,
                  width=18,height=7, #控件大小(注意单位不是像素)
                  bg="white") #默认白色背景
Label2.place(x=20,y=110) #图片显示框在界面上的位置

Buttom1 = tk.Button(root,
                    width=15,height=1, #按钮大小
                    text='加载检索图片', #按钮文本
                    relief=RELIEF[3], #按钮的风格
                    command=Buttom1_CallBack) #绑定响应函数
Buttom1.place(x=25, y=250) #按钮在界面上的位置

#添加参数文本框、下拉框、下拉框内容输出按钮
Combobox1 = ttk.Combobox(root, width=17, height=1)
Combobox1['value'] = ('窗前明月光','疑是地上霜','举头望明月','明月照我影')
Combobox1.current(0)
Combobox1.place(x=15, y=320)

Label3 = tk.Label(root, text='参数')
Label3.place(x=15, y=350)

Entry1 = ttk.Entry(root, width=9) #文本框为啥没有H
Entry1.place(x=50, y=350)
Entry1.insert(0,'0.5')

Buttom2 = tk.Button(root,
                    width=15,height=1,
                    text='你选择了什么?',
                    relief=RELIEF[3],
                    command=Buttom2_CallBack)
Buttom2.place(x=25, y=380)

#添加进度条、开始处理按钮
Progressbar1 = ttk.Progressbar(root, length=600, value=0, cursor=CURSOR[1])
Progressbar1.place(x=15, y=460)

Buttom3 = tk.Button(root,
                    width=15,height=1,
                    text='开始处理',
                    relief=RELIEF[3],
                    command=Buttom3_CallBack)
Buttom3.place(x=630, y=455)

#添加两个滚动按钮
Buttom4 = tk.Button(root,
                    width=3,height=1,
                    text='<',
                    relief=RELIEF[1],
                    command=Buttom4_CallBack)
Buttom4.place(x=380, y=410)

global page_count #全局变量,用来控制页码
page_count=0
Label4 = tk.Label(root, text='第0页')
Label4.place(x=420, y=410)

Buttom5 = tk.Button(root,
                    width=3,height=1,
                    text='>',
                    relief=RELIEF[1],
                    command=Buttom5_CallBack)
Buttom5.place(x=470, y=410)

root.mainloop()
#这句话后面不能有代码

以上就是用Python给图像算法做个简单应用界面的详细内容,更多关于python 应用界面的资料请关注我们其它相关文章!

(0)

相关推荐

  • python 实现倒计时功能(gui界面)

    运行效果: 完整源码: ##import library from tkinter import * import time from playsound import playsound ## display window root = Tk() root.geometry('400x300') root.resizable(0,0) root.config(bg ='blanched almond') root.title('TechVidvan - Countdown Clock And

  • 用python制作个论文下载器(图形化界面)

    在科研学习的过程中,我们难免需要查询相关的文献资料,而想必很多小伙伴都知道SCI-HUB,此乃一大神器,它可以帮助我们搜索相关论文并下载其原文.可以说,SCI-HUB造福了众多科研人员,用起来也是"美滋滋". 在上一篇文章中介绍了分析过程以及相应的函数代码.根据小伙伴们的反映发现了一些问题,毕竟命令框的形式用起来难免没那么"丝滑".为了让大家更方便地使用,可以"纵享丝滑",kimol君决定写一个图形界面(GUI): PS.由于近期实属忙到晕厥,这

  • Python中pycharm编辑器界面风格修改方法

    教你配置属于自己的PYcharm界面色彩风格,PYthon学习必备 GO 第一步,换成深色背景,保护视力 PyCharm默认的背景是白色的,比较刺眼.还是换成深色的比较好,而且感觉比较酷一点. 修改方法:进入PyCharm,File ==>setting==> Appearance&Behavior ==> Appearance,右侧找到Theme一项,换成Darcula. 第二步,修改字体,换一个更好看的字体 修改方法:进入PyCharm,File ==> setting

  • python制作一个简单的gui 数据库查询界面

    一.准备工作: 1.安装mysql3.7,创建一个test数据库,创建student表,创建列:(列名看代码),创建几条数据 (以上工作直接用navicat for mysql工具完成) 二.代码: import sys import tkinter as tk import mysql.connector as sql #--------------------查询函数--------------------------- def sql_connect(): listbox_show.del

  • python实现简单的井字棋游戏(gui界面)

    项目输出 项目先决条件 要使用python构建井字游戏,我们需要tkinter模块和python的基本概念 Tkinter模块是用于渲染图形的标准图形用户界面. Tkinter.messagebox用于显示消息框 要安装tkinter模块,我们在命令提示符下使用了pip install命令: pip install tkinter 项目文件结构 这些是使用python构建井字游戏的步骤: 导入模块 初始化窗口 检查结果的功能 检查获胜者的功能 定义标签和按钮 1.导入模块 from tkinte

  • python tkinter制作用户登录界面的简单实现

    本文只是几年前学习的tkinter的时候写的测试程序,十分之简陋,只是学习用,没什么其他用处. 学习一下莫烦Python的tkinter教程,根据教程制作了用户登录注册页.基本功能为检查登录.注册. 运行如下: ​​​​​​ 代码如下: # -*- coding: utf-8 -*- """ Created on Sun Aug 5 10:34:10 2018 @author: Administrator """ import tkinter a

  • Python聊天室带界面实现的示例代码(tkinter,Mysql,Treading,socket)

    一.前言 我用的是面向对象写的,把界面功能模块封装成类,然后在客户端创建对象然后进行调用.好处就是方便我们维护代码以及把相应的信息封装起来,每一个实例都是各不相同的. 所有的界面按钮处理事件都在客户端,在创建界面对象是会把客户端的处理事件函数作为创建对象的参数,之后再按钮上绑定这个函数,当点击按钮时便会回调函数 二.登录界面实现 登录界面模块chat_login_panel.py from tkinter import * # 导入模块,用户创建GUI界面 # 登陆界面类 class Login

  • python2利用wxpython生成投影界面工具的图文详解

    本投影界面工具的功能: 准备好.prj投影文件,将输入文件夹内的WGS84经纬度坐标shp文件,投影为平面文件,成果自动命名为prj_***并新建在输入文件夹同一路径下. 下一步目标: 利用pyinstaller或其他打包库生成exe文件,目前停滞在python2语法.arcpy打包出错相关问题上. 参考文献: <Using Py2exe with Arcpy- It can be done easily!> <如何使用py2exe打包arcpy脚本?> GUI界面示意图 投影文件

  • Python基础之tkinter图形化界面学习

    一.基础内容 import tkinter as tk from PIL import Image,ImageTk def my(): pwin.destroy() win.deiconify() win = tk.Tk() #win.geometry('320x240+100+50') #长320宽240 右100,下50 win['width']=320 #可以用win.keys()查看哪些可以这样写 win['height']=240 win.title('tkinter图形化专题学习')

  • 一个非常简单好用的Python图形界面库(PysimpleGUI)

    前一阵,我在为朋友编写一个源代码监控程序的时候,发现了一个 Python 领域非常简单好用的图形界面库. 说起图形界面库,你可能会想到 TkInter.PyQt.PyGUI 等流行的图形界面库,我也曾经尝试使用,一个很直观的感受就是,这太难用了.就去网上搜搜,看看有没有一些 demo,拿来改改,结果很少有,当时我就放弃了这些图形库的学习,转而使用了 vue+flask 的形式以浏览器网页作为程序界面,因为我会这个,即使实现起来稍微麻烦,但是也快. 那有朋友可能问了:一定要学习图形界面吗? 其实不

  • Python PyQt5-图形界面的美化操作

    前言 今天就来学习一下图形设计界面的美化,首先我们知道 QtDesigner设计出来的界面默认是不太怎么美观的.所以在以后的实际开发中很多界面都是要美化的.那么现在来看看具体怎么美化. 首先我们要知道在什么地方美化它. 1 软件背景的添加 最简单的方法就是直接在设计界面时,在style里直接用css美化. # 添加背景 QWidget { border-image:url(C:/Users/DELL/Pictures/Saved Pictures/1.jpg); } #下面的防止背景干扰其他控件

随机推荐