需要有关子菜单的建议

时间:2019-06-17 07:04:31

标签: python opencv tkinter

因此,当前,我必须设计一些带有许多选项的菜单栏。但是我已经解决了菜单栏部分,我迷失的是我想拥有2张图像。例如,如果我单击“查看”,它会下拉“原始图像”和“缩放图像”,而如果我单击其中任何一个,它将显示具有正确图像的各个图像。

import cv2
import numpy as np
img = cv2.imread('image.jpg')

scaled_img = cv2.resize(img, (400, 500))
cv2.imshow('Original image', img)

根据我的原始代码;而且我不确定将上面的代码(如果正确)插入到下面。

def showImg(self):
    load = Image.open('image.jpg')
    render = ImageTk.PhotoImage(load)       
    img = Label(self, image=render)
    img.image = render
    img.place(x=0,y=0)

2 个答案:

答案 0 :(得分:0)

from tkinter import *
import tkinter as tk
from PIL import Image, ImageTk


class Window(Frame):

    def __init__(self, master=None):
        Frame.__init__(self, master)
        self.master = master
        self.init_window()

    # Creation of init_window
    def init_window(self):
        img = Image.open("001.png")
        img = img.resize((250, 250))  ## The (250, 250) is (height, width)
        photo = ImageTk.PhotoImage(img)
        quitBtn2 = Label(root, image=photo)
        quitBtn2.image = photo
        quitBtn2.pack()
  

图像模块

     

Image模块提供了一个具有相同名称的类,该类用于   代表PIL图像。该模块还提供了一些工厂   函数,包括从文件加载图像以及将图像加载到   创建新图像。

     

https://pillow.readthedocs.io/en/stable/reference/Image.html

答案 1 :(得分:0)

您可以使用Pillow模块而不是OpenCV来调整图像大小。下面是一个示例:

from tkinter import *
from PIL import Image, ImageTk

class Window(Tk):
    def __init__(self):
        Tk.__init__(self)
        self.geometry('500x600')

        # initialize the images
        img = Image.open('image.jpg')
        self.original_img = ImageTk.PhotoImage(image=img)
        img = img.resize((400, 500))
        self.scaled_img = ImageTk.PhotoImage(image=img)

        # create the menu bar
        menubar = Menu(self)
        self.config(menu=menubar)

        file = Menu(menubar, tearoff=0)
        file.add_command(label='New')
        file.add_command(label='Open')
        file.add_command(label='Save')
        file.add_command(label='Save As')
        file.add_separator()
        file.add_command(label='Exit', command=self.client_exit)
        menubar.add_cascade(label='File', menu=file)

        view = Menu(menubar, tearoff=0)
        view.add_command(label='Original Image', command=lambda:self.showImg(self.original_img))
        view.add_command(label='Scaled Image', command=lambda:self.showImg(self.scaled_img))
        menubar.add_cascade(label='View', menu=view)

        # create a label to show the image
        self.imgbox = Label(self)
        self.imgbox.place(x=0, y=0)

    def showImg(self, img):
        self.imgbox.config(image=img)

    def client_exit(self):
        self.destroy()

Window().mainloop()