Python, выполнить скрипт в графическом интерфейсе, когда элемент подменю выбран в tkinter? - PullRequest
0 голосов
/ 17 мая 2018

У меня нет опыта работы с GUI на python .... Итак, сначала я опубликую код GUI.

from tkinter import*

def needTodo():
    #Enter your code

root = Tk()
root.title('Something')

# ******** MAIN MENU  ******** #

menu = Menu(root)
root.config(menu=menu)
root.minsize(320, 320)
root.geometry("320x320")

subMenu = Menu(menu)
menu.add_cascade(label="File", menu=subMenu)
subMenu.add_command(label="Insert Image", command=needTodo)
subMenu.add_command(label="Web Cam", command=needTodo)
subMenu.add_separator()
subMenu.add_command(label="Exit", command=needTodo)

editMenu = Menu(menu)
menu.add_cascade(label="Edit", command=editMenu)
editMenu.add_command(label="Redo", command=needTodo)

# *********** Toolbar ************ #

toolbar = Frame(root, bg="gray")

insertBar = Button(toolbar, text="Insert Image", command=needTodo)
insertBar.pack(side=LEFT, padx=2, pady=2)
printBar = Button(toolbar, text="Print", command=needTodo)
printBar.pack(side=RIGHT, padx=2, pady=2)

toolbar.pack(side=TOP, fill=X)

# ********* IMAGE BACKGROUND ************ #


canvas = Canvas(width=320, height=320, bg='white')
canvas.pack()
gif1 = PhotoImage(file='D:/Rotating_brain_colored.gif')
canvas.create_image(0, 0, image=gif1, anchor=NW)

# ********* STATUS BAR ************ #

status = Label(root, text="Preparing to do work....", bd=1, relief=SUNKEN, anchor=W)
status.pack(side=BOTTOM, fill=X)


root.mainloop()

Итак, когда в подменю нажата опция «веб-камера», я хочу, чтобы она выполняла функцию, записанную в другом файле (main.py) в той же папке.

Функция называется «TakeSnapAndSave ()», которая в основном получает доступ к веб-камере и делает снимок при определенных обстоятельствах.

Я хочу разделить gui.py и main.py. Как я могу это сделать?

Заранее спасибо.

main.py код:

import cv2
import numpy as np
import os
import matplotlib.pyplot as plt

cascade = cv2.CascadeClassifier('xcascade.xml')

def TakeSnapAndSave():
    cap = cv2.VideoCapture(0)

    num = 0
    while num<1000:
        ret, img = cap.read()
        gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)

        cas = cascade.detectMultiScale(gray, 10, 10)
        for(x,y,w,h) in cas:
            cv2.rectangle(img,(x,y), (x+w,y+h),(255,255,0),5)
            cv2.imwrite('opencv'+str(num)+'.jpg',img)
            num = num+1
            cv2.imshow('img',img)
            cv2.waitKey(1000)
            cap.release()
            cv2.desrtoyAllWindows()
            break

TakeSnapAndSave()

1 Ответ

0 голосов
/ 17 мая 2018

Последняя строка кода в вашем файле main.py вызывает функцию TakeSnapAndSave, когда файл импортируется, а не когда опция выбрана в графическом интерфейсе. Удалите этот вызов TakeSnapAndSave из main.py, и совет Novel должен сработать:

subMenu.add_command (label = "Web Cam", command = main.TakeSnapAndSave)

Проверьте поток, защищающий код от автоматического запуска: Почему Python запускает мой модуль, когда я импортирую его, и как мне его остановить?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...