精华内容
下载资源
问答
  • 经常会遇到json报文中有图片URL,以及ROI的坐标x、y、w、h,然后需要验证下这个图片的什么位置,一般时候只能根据坐标值定性目测下。最近用tkinter写了个打开本地图片并且将rect的坐标值标注在图片上的工具,...

            经常会遇到json报文中有图片URL,以及ROI的坐标x、y、w、h,然后需要验证下这个框在图片的什么位置,一般时候只能根据坐标值定性目测下。最近用tkinter写了个打开本地图片并且将rect的坐标值标注在图片上的工具,这样就可以实现定量的分析了。Python需要的第三方库有:pillow,opencv。至于tkinter的那些基本知识,我就不提了。直接上代码吧。

    from tkinter import *
    from time import *
    import tkinter.filedialog
    import io
    import cv2
    from PIL import Image, ImageTk
    
    root = Tk()
    w_box = 1280
    h_box = 640
    root.title('RectOnPic Tool')
    root.geometry('1280x640')
    e = StringVar()
    # print(e)
    e_entry = Entry(root,  textvariable=e)
    e_entry.grid(row=6, column=1, padx=10, pady=5)
    # print(e_entry.get())
    # root.resizable(0,0)
    Label1 = Label(root, text='X:').grid(row=0, column=0)
    Label2 = Label(root, text='Y:').grid(row=1, column=0)
    v1 = StringVar()
    p1 = StringVar()
    v1.set(0)
    p1.set(0)
    submit_button = Button(root, text="选择文件", command=root.quit)
    Label3 = Label(root, text='W:').grid(row=3, column=0)
    Label4 = Label(root, text='H').grid(row=4, column=0)
    v2 = StringVar()
    p2 = StringVar()
    v2.set(0)
    p2.set(0)
    e1 = Entry(root, textvariable=v1)
    e2 = Entry(root, textvariable=p1)
    e1.grid(row=0, column=1, padx=10, pady=5)
    e2.grid(row=1, column=1, padx=10, pady=5)
    e3 = Entry(root, textvariable=v2)
    e4 = Entry(root, textvariable=p2)
    e3.grid(row=3, column=1, padx=10, pady=5)
    e4.grid(row=4, column=1, padx=10, pady=5)
    global imgGl
    imgGl = Label(root, image=None)
    imgGl.place(x=300, y=0)
    
    def resize(w_box, h_box, pil_image):
        w, h = pil_image.size
        f1 = 1.0 * w_box / w
        f2 = 1.0 * h_box / h
        factor = min([f1, f2])
        width = int(w * factor)
        height = int(h * factor)
        return pil_image.resize((width, height), Image.ANTIALIAS)
    
    def choose_file():
        selectFileName = tkinter.filedialog.askopenfilename(title='选择文件')
        # print(selectFileName)
        e.set(selectFileName)
    
    def showImg(img1):
        imgGl.config(image='')
        load = Image.open(img1)
        pil_image_resized = resize(w_box, h_box, load)
        render = ImageTk.PhotoImage(pil_image_resized)
        imgGl.image = render
        imgGl.config(image=render)
    
    def showImgAgain(img2):
        img = cv2.imread(img2)
        x = float(e1.get())
        y = float(e2.get())
        w = float(e3.get())
        h = float(e4.get())
        size = img.shape
        sz0 = size[0]
        sz1 = size[1]
        cv2.rectangle(img, (int(x * sz1), int(y * sz0)), (int((x + w) * sz1), int((y + h) * sz0)), (0, 255, 0), 4)
        cv2.imwrite('completed.jpg', img)
        showImg('completed.jpg')
    
    
    Button(root, text='退出', width=10, command=root.quit)\
        .grid(row=9, column=0, sticky=W, padx=10, pady=5)
    Button(root, text="选择文件", width=10, command=choose_file)\
        .grid(row=6, column=0, sticky=W, padx=10, pady=5)
    Button(root, text="显示图片", width=10,command=lambda: showImg(e_entry.get()))\
        .grid(row=7, column=0, sticky=W, padx=10, pady=5)
    Button(root, text="画坐标框", width=10,command=lambda: showImgAgain(e_entry.get()))\
        .grid(row=8, column=0, sticky=W, padx=10, pady=5)
    
    mainloop()

          建议用pycharm的开发环境打开,代码跑的结果如下:

    效果图
    代码运行效果图

    如果想生成EXE文件,可以pip install pyinstaller 然后打开命令窗口执行下pyinstaller -F -w xxx.py 即可。

    展开全文
  • 先来看一下该方法的说明 create_image(position, **options) [#] Draws an image on the canvas. position Image position, given as two coordinates. **options Image options. activeimage= ...
  • import tkinter as tk from tkinter import * from tkinter import filedialog import cv2 import numpy as np ... '''用于展示选择的图片''' def __init__(self, master): self.master = master master.tit
    import tkinter as tk
    from tkinter import *
    from tkinter import filedialog
    import cv2
    import numpy as np
    from PIL import Image, ImageTk
    
    
    class DisplayImage:
        '''用于展示选择的图片'''
        def __init__(self, master):
            self.master = master
            master.title("GUI")
            self.image_frame = Frame(master, bd=0, height=200, width=800, bg='yellow', highlightthickness=2,
                                     highlightbackground='gray', highlightcolor='black')
            self.image_frame.pack()
            self.Text_label = Label(master, text='图像预览')
            self.Text_label.pack()
            self.Choose_image = Button(master, command=self.choose_pic, text="Choose image",
                                       width=17, default=ACTIVE, borderwidth=0)
            self.Choose_image.pack()
            self.Display_image = Button(master, command=self.display_image, text="Display image",
                                        width=17, default=ACTIVE, borderwidth=0)
            self.Display_image.pack()
            self.filenames = []
            self.pic_filelist = []
            self.imgt_list = []
            self.image_labellist = []
    
        def display_image(self, event=None):
            #在重新选择图片时清空原先列表
            self.pic_filelist.clear()
            self.imgt_list.clear()
            self.image_labellist.clear()
    
            #清空框架中的内容
            for widget in self.image_frame.winfo_children():
                widget.destroy()
    
            #布局所选图片
            for i in range(len(self.filenames)):
                self.pic_filelist.append(Image.open(self.filenames[i]).resize((200,200)))
                self.imgt_list.append(ImageTk.PhotoImage(image=self.pic_filelist[i]))
                self.image_labellist.append(Label(self.image_frame, highlightthickness=0, borderwidth=0))
                self.image_labellist[i].configure(image=self.imgt_list[i])
                self.image_labellist[i].pack(side=LEFT, expand=True)
    
        def choose_pic(self, event=None):
            self.filenames.clear()
            self.filenames += filedialog.askopenfilenames()
    
    def main():
        window = tk.Tk()
        GUI = DisplayImage(window)
        window.title('投影亮度参数标定软件模块')
        window.geometry('1000x600')
        window.mainloop()
    
    if __name__ == '__main__':
        main()
    
    展开全文
  • tkinter登陆

    2021-06-20 11:33:48
    import tkinter as tk from tkinter import * from tkinter import Frame import tkinter.messagebox import threading import pickle def login(): window=tk.Tk() def get_screen_size(win): return win....

    先上效果图
    在这里插入图片描述
    源代码:

    import tkinter as tk
    from tkinter import *
    from tkinter import Frame
    import tkinter.messagebox
    import threading
    import pickle
    
    
    def login():
        window=tk.Tk()
        def get_screen_size(win):
                return win.winfo_screenwidth(),win.winfo_screenheight()
        screenwidth = window.winfo_screenwidth()
        screenheight = window.winfo_screenheight()
        size = '%dx%d+%d+%d' % (450,300, (screenwidth - 450)/2, (screenheight - 300)/2)
        window.title('欢迎进入饮茶系统')
        window.geometry(size)
    
        #画布放置图片
        canvas=tk.Canvas(window,height=300,width=500)
        imagefile=tk.PhotoImage(file='下载.gif')
        # image=canvas.create_image(0,0,anchor='nw',image=imagefile)
        image=canvas.create_image(15, 25, anchor = NW,image=imagefile)
        canvas.pack(side='top')
        #标签 用户名密码
        tk.Label(window,text='用户名:').place(x=100,y=100)
        tk.Label(window,text='密码:').place(x=100,y=150)
        #用户名输入框
        var_usr_name=tk.StringVar()
        entry_usr_name=tk.Entry(window,textvariable=var_usr_name)
        entry_usr_name.place(x=160,y=100)
        #密码输入框
        var_usr_pwd=tk.StringVar()
        entry_usr_pwd=tk.Entry(window,textvariable=var_usr_pwd,show='*')
        entry_usr_pwd.place(x=160,y=150)
    
        #登录函数
        def usr_log_in():
            #输入框获取用户名密码
            usr_name=var_usr_name.get()
            usr_pwd=var_usr_pwd.get()
            #从本地字典获取用户信息,如果没有则新建本地数据库
            try:
                with open('usr_info.pickle','rb') as usr_file:
                    usrs_info=pickle.load(usr_file)
            except FileNotFoundError:
                with open('usr_info.pickle','wb') as usr_file:
                    usrs_info={'admin':'pw'}
                    pickle.dump(usrs_info,usr_file)
            #判断用户名和密码是否匹配
            if usr_name in usrs_info: 
                if usr_pwd == usrs_info[usr_name]: 
                    username=usr_name
                    password=usrs_info[usr_name]
        #             print(usr_name) #账户
        #             print(usrs_info[usr_name])  #密码
                    if usr_name=='xiaowang':
                        usr_name_1= '小王'
                    elif usr_name=='xiaoli':
                        usr_name_1= '小李'  
                    else:
                        usr_name_1=usr_name
                    tk.messagebox.showinfo(title='welcome',
                                           message='欢迎您:'+usr_name_1)
                    window.destroy()
                    tkintera(username,password,usr_name_1)
                    try:
                        root.destroy()
                    except:
                        pass
                else:
                    tk.messagebox.showerror(message='密码错误')
            elif usr_name == 'whoisyourdaddy':
                if usr_pwd == 'whoisyourdaddy': 
                    usr_name_1='管理员'
                    username = 'xiaowang'
                    password ='123456'
                    tk.messagebox.showinfo(title='welcome',
                                           message='欢迎您:'+usr_name_1)
                    window.destroy()
                    tkintera(username,password,usr_name_1)
                    try:
                        root.destroy()
                    except:
                        pass
                    
            #用户名密码不能为空
            elif usr_name=='' or usr_pwd=='' :
                tk.messagebox.showerror(message='用户名或密码为空')
            #不在数据库中弹出是否注册的框
            else:
                is_signup=tk.messagebox.askyesno('欢迎','您还没有注册,是否现在注册')
                if is_signup:
                    usr_sign_up()
    
        #注册函数
        def usr_sign_up():
            #确认注册时的相应函数
            def signtowcg():
                #获取输入框内的内容
                nn=new_name.get()
                np=new_pwd.get()
                npf=new_pwd_confirm.get()
    
                #本地加载已有用户信息,如果没有则已有用户信息为空
                try:
                    with open('usr_info.pickle','rb') as usr_file:
                        exist_usr_info=pickle.load(usr_file)
                        print(exist_usr_info)
                except FileNotFoundError:
                    exist_usr_info={}           
    
                #检查用户名存在、密码为空、密码前后不一致
                if nn in exist_usr_info:
                    tk.messagebox.showerror('错误','用户名已存在')
                elif np =='' or nn=='':
                    tk.messagebox.showerror('错误','用户名或密码为空')
                elif np !=npf:
                    tk.messagebox.showerror('错误','密码前后不一致')
                    print(exist_usr_info)
                #注册信息没有问题则将用户名密码写入数据库
                else:
                    exist_usr_info[nn]=np
                    with open('usr_info.pickle','wb') as usr_file:
                        pickle.dump(exist_usr_info,usr_file)
                    tk.messagebox.showinfo('欢迎','注册成功')
                    #注册成功关闭注册框
                    window_sign_up.destroy()
            #新建注册界面
            window_sign_up=tk.Toplevel(window)
            size = '%dx%d+%d+%d' % (350,200, (screenwidth - 350)/2, (screenheight - 200)/2)
            window_sign_up.geometry(size)
            window_sign_up.title('注册')
            #用户名变量及标签、输入框
            new_name=tk.StringVar()
            tk.Label(window_sign_up,text='用户名:').place(x=10,y=10)
            tk.Entry(window_sign_up,textvariable=new_name).place(x=150,y=10)
            #密码变量及标签、输入框
            new_pwd=tk.StringVar()
            tk.Label(window_sign_up,text='请输入密码:').place(x=10,y=50)
            tk.Entry(window_sign_up,textvariable=new_pwd,show='*').place(x=150,y=50)    
            #重复密码变量及标签、输入框
            new_pwd_confirm=tk.StringVar()
            tk.Label(window_sign_up,text='请再次输入密码:').place(x=10,y=90)
            tk.Entry(window_sign_up,textvariable=new_pwd_confirm,show='*').place(x=150,y=90)    
            #确认注册按钮及位置
            bt_confirm_sign_up=tk.Button(window_sign_up,text='确认注册',
                                         command=signtowcg)
            bt_confirm_sign_up.place(x=150,y=130)
        #退出的函数
        def usr_sign_quit():
            window.destroy()
        def pw_change():
            def signtochange():
                print('执行更改signtochange')
                #获取输入框内的内容
                op=old_pwd.get() #老密码
                nn=new_name.get() #用户名
                np=new_pwd.get() # 新密码
                npf=new_pwd_confirm.get() #确认新密码
                #本地加载已有用户信息,如果没有则已有用户信息为空
                try:
                    with open('usr_info.pickle','rb') as usr_file:
                        exist_usr_info=pickle.load(usr_file)
                        print('加载成功:{}'.format(exist_usr_info))
                except FileNotFoundError:
                    is_signup=tk.messagebox.askyesno('欢迎','您还没有注册,是否现在注册')
                    if is_signup:
                        window_pw_change.destroy()
                        usr_sign_up()           
                #检查用户名存在、密码为空、密码前后不一致
                if nn not in exist_usr_info:
                    tk.messagebox.showerror('错误','用户名不存在')
                else:
                    if op != exist_usr_info[nn]: 
                        tk.messagebox.showerror('错误','旧密码错误')
                    else:
                        if np=='' or npf=='':
                            tk.messagebox.showerror('错误','用户名或密码为空')
                        else:
                            if np !=npf:
                                tk.messagebox.showerror('错误','新密码前后不一致')
                            elif np ==op:
                                tk.messagebox.showerror('错误','新旧密码不能一样')
                            else:
                                print('1')
                                print('exist_usr_info:{}'.format(exist_usr_info))
                                print('exist_usr_info[nn]:{}'.format(exist_usr_info[nn]))
                                exist_usr_info[nn]=np
                                with open('usr_info.pickle','wb') as usr_file:
                                    pickle.dump(exist_usr_info,usr_file)
                                    print(exist_usr_info)
                                tk.messagebox.showinfo('','更改密码成功')
                                #注册成功关闭注册框
                                window_pw_change.destroy()
    
            #新建注册界面
            window_pw_change=tk.Toplevel(window)
            size = '%dx%d+%d+%d' % (350,200, (screenwidth - 350)/2, (screenheight - 200)/2)
            window_pw_change.geometry(size)
            window_pw_change.title('更改密码')
            #用户名变量及标签、输入框
            new_name=tk.StringVar()
            tk.Label(window_pw_change,text='用户名:').place(x=10,y=10)
            tk.Entry(window_pw_change,textvariable=new_name).place(x=150,y=10)
            #密码变量及标签、输入框
            old_pwd=tk.StringVar()
            tk.Label(window_pw_change,text='请输入旧密码:').place(x=10,y=50)
            tk.Entry(window_pw_change,textvariable=old_pwd,show='*').place(x=150,y=50) 
            new_pwd=tk.StringVar()
            tk.Label(window_pw_change,text='请输入新密码:').place(x=10,y=90)
            tk.Entry(window_pw_change,textvariable=new_pwd,show='*').place(x=150,y=90)    
            #重复密码变量及标签、输入框
            new_pwd_confirm=tk.StringVar()
            tk.Label(window_pw_change,text='请再次输入新密码:').place(x=10,y=130)
            tk.Entry(window_pw_change,textvariable=new_pwd_confirm,show='*').place(x=150,y=130)    
            #确认注册按钮及位置
            bt_confirm_pw_change=tk.Button(window_pw_change,text='确认更改',command=signtochange)
            bt_confirm_pw_change.place(x=145,y=165)
            
        #登录 注册按钮
        bt_login=tk.Button(window,text='登录',command=usr_log_in)
        bt_login.place(x=100,y=230)
        bt_logup=tk.Button(window,text='注册',command=usr_sign_up)
        bt_logup.place(x=210,y=230)
        bt_logquit=tk.Button(window,text='退出',command=usr_sign_quit)
        bt_logquit.place(x=320,y=230)
        bt_pwchange=tk.Button(window,text='密码更改',height=1,fg='blue',command=pw_change)
        bt_pwchange.place(x=350,y=146)
        tk.Label(window,text='©2021 H').place(x=195,y=270)
        #主循环
        window.mainloop()
    
    
    if __name__ == '__main__':
        login()
        try:
            window.destroy()
    #         print('1')
        except:
            pass
    

    懒得写心路历程了,打完收工。

    展开全文
  • tkinter中的canvas的边框问题

    千次阅读 2020-02-20 15:00:41
    使用tkinter中创建canvas时,会设置canvas的宽高。一般我们认为canvas中画图区域就是设置的宽高。其实这不太正确,canvas还有一个边框,如果不另外设置,真正的画图区域要减去边框。 比如我们容器的尺寸为width, ...

    使用tkinter中创建canvas时,会设置canvas的宽高。一般我们认为canvas中画图区域就是设置的宽高。其实这不太正确,canvas还有一个边框,如果不另外设置,真正的画图区域要减去边框。

    比如我们容器的尺寸为width, height。然后在这个容器中添加一个唯一的canvas,canvas的尺寸设置为width, height,并且pack(expand=1, fill=both)。如果给这个canvas设置一个背景色,容器外部设置另外一个背景色,就可以看得到canvas四周有一条白色的边框。这在我们做窗口布置时,显得不太完美。改进方法其实很简单:

    canvas.config(highlightthickness=0)
    
    展开全文
  • 主要介绍了python GUI编程(Tkinter) 创建子窗口及在窗口上用图片绘图实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
  • Tkinter打造GUI开发工具(10)Tkinter的Frame框架部件 Frame框架部件是Tkinter的容器部件,负责安排其它部件的位置,Frame组件采用在屏幕上的矩形区域组织布局,并提供其它部件的填充,也包括Frame框架部件本身,...
  • 怎么用python tkinter做窗口边框美化?

    千次阅读 2021-01-14 11:43:56
    win.attributes(’-alpha‘,1) 第二个参数取0-1之间的范围 设置左上角图标: 图片要求是ico格式 用法就是正常的套用语句,常见的使用方法都在上述内容里,大家如果需要遇到修改边框内容,可以直接套用使用。
  • Python_tkinter_Frame 框架

    千次阅读 2018-12-02 22:05:19
    ## PhotoImage()方法只支持gif格式的图片。 phtot = PhotoImage(file=r"E:\002.jpg") imglabel = Label(root,image=phtot) imglabel.pack(side=LEFT) def callback(): var.set("你的身份验证失败,你不是会员") # ...
  • Python的tkinter库实现窗体单选

    千次阅读 2019-08-16 14:53:00
    Tkinter是一个python模块,是一个调用Tcl/Tk的接口,它是一个跨平台的脚本图形界面接口。Tkinter不是唯一的python图形编程接口,但是是其中比较流行的一个。最大的特点是跨平台,缺点是性能不太好,执行速度慢。 ...
  • tkinter实现单选和复选

    千次阅读 2017-11-22 11:18:59
    一 代码 import tkinter root = tkinter.Tk() r = tkinter.StringVar() r.set('1') radio = tkinter.Radiobutton(root, variable = r, value ='1',
  • 单选(Radiobutton)与复选(Checkbutton) thinter.Radiobutton(用于存放的父组件,属性参数...) thinter.Checkbutton(用于存放的父组件,属性参数...) 具有以下属性   anchor  设置组件中文字的对其...
  • Python 窗体 tkinter 列表 Listbox
  • Python 提示详解(tkinter.messagebox)

    千次阅读 2021-05-18 16:47:26
    文章目录1 概述2 示例2.1 提示2.2 提问 1 概述 2 示例 2.1 提示 import tkinter from tkinter.messagebox import * window = tkinter.Tk() window.withdraw() # 退出默认 tk 窗口 result = showinfo('提示',...
  • 本节重点介绍输入框和文本显示。更多内容请看tkinter库入门详细教程(三) 如上图所示,在输入窗口输入字符串后,选择在‘在光标处插入’或‘在末尾处插入’,文本显示能显示出相应内容。 源代码: import ...
  • tkFileBrowser是tkinter.filedialog的替代方法,它允许用户选择文件或目录。 GUI用tkinter编写,但是外观更接近GTK,并且该应用程序使用GTK书签(例如,以鹦鹉螺或thunar显示的书签)。 该文件浏览器支持新的目录...
  • 在这一篇博客中,我们要创建一个窗体,来进行图片与文件加的选择,并将上一篇的功能整合进来,设计的内容主要有tkinter的使用。菜鸟教程相关内容链接:https://www.runoob.com/python/python-gui-tkinter.html 参考...
  • 如果此内显示“ Essentials”,则跳过此步骤和下一个步骤。 4、单击基本。这是在下拉菜单顶部附近。 5、选择您的内容。在页面上单击要概述的照片,文字或其他元素。 6、单击窗口选项卡。它位于窗口(Windows)或...
  • import tkinter as tk root = tk.Tk() root.overrideredirect(True) root.mainloop() 这是有边框的样子: 这是没有边框的样子: 没有边框就没有方法移动,默认是在窗口的左上角。并且在任务栏也没有显示,但...
  • TKinter

    千次阅读 多人点赞 2017-01-18 21:49:50
    Tkinterimport Tkinter as tkapp=tk.Tk()##创建Tk类 app.title("YUE~AN")##标题thelabel=tk.Label(app,text="YUE AN")##标签,上面可以添加文本,图像等 thelabel.pack()##可以自动调节大小的方法app.mainloop()...
  • 图片查看器-Python-tkinter

    千次阅读 2021-04-28 14:31:40
    图片浏览 2 图像缩放 3 图像旋转 4 切换浏览 5 拖拽查看 设计思路 设计思路概要 图像处理 PILLOW库实现 UI界面
  • Python tkinter 单选组件用于tkinter GUI里添加单选按钮,单选可以添加文本和图像。当单选勾选时,可以执行指定的函数,或者获取勾选的值。 使用语法 widget = Radiobutton( master, parameter=value, ... ...
  • 最近用到了tkinter,想用自己喜欢的图片作为背景,看了不少博客,可能是我少敲了什么,很少有能成功运行的,最后终于发现了一个可行方案,于是在这里记录一下(代码为原创) 图片使用的p站喜爱画师的作品(因为是...
  • Tkinter打造GUI开发工具(9)Tkinter的位图和图片格式 在Tkinter小部件的位图选项,有下面这些位图是可用的。 上面的图片显示了标准的位图按钮部件能使用的为图。从左到右用后面这些字符串表示,“error”, “gray...
  • from tkinter import * win = Tk() win.geometry("400x400") win.title("练习输入框") b = PhotoImage(file=r"D:\AIshaoNv\桌面\新123\1_VR4DO%}Y%2Y(~LS{677`K.gif") def aa(): aaa = Label(text="""这是一只...
  • 如果可以放图片的话,可以不可以说一下得用什么方法啊,self.grid.SetCellValue(row, col, str)这个方法的 值好像只能填str类型的
  • tkinter第二章(添加图片,背景图片)

    千次阅读 2017-08-25 11:33:00
    #插入文件图片import tkinter as tk root = tk.Tk() #创建一个标签类, [justify]:对齐方式textLabel = tk.Label(root,text="你在右边会看到一个图片,\n我在换个行", justify = tk.LEFT)#左对齐textLabel.pack...
  • 做一个欢迎界面,如下图。...import tkinter as tk root = tk.Tk() root.geometry('650x450+150+100') root.title('检测J波界面化') root.resizable(False, False) #设置条形 photo = tk.PhotoImage(...
  • tkinter使用label视频播放

    千次阅读 2020-11-02 14:26:47
    使用tkinter显示视频流的一个办法是使用label来逐帧显示图片。 from Tkinter import * from PIL import ImageTk, Image import cv2 root = Tk() # Create a frame app = Frame(root, bg="white") app.grid() # ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 3,526
精华内容 1,410
关键字:

tkinter图片框