python - Python,在 tkinter 中选择子菜单项时在 GUI 中执行脚本?
问题描述
我对 python 中的 GUI 没有任何经验......所以,我将首先发布 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()
解决方案
main.py 文件中的最后一行代码是在导入文件而不是在 GUI 中选择选项时调用函数 TakeSnapAndSave。从 main.py 中删除对 TakeSnapAndSave 的调用,Nove 的建议应该有效:
subMenu.add_command(label="Web Cam", command=main.TakeSnapAndSave)
查看有关防止代码自动运行的线程:为什么 Python 在我导入它时运行我的模块,以及如何停止它?
推荐阅读
- javascript - 从 Vue.js 中的数组中删除对象 - throws 方法的属性未定义
- javascript - 如何以编程方式禁用浏览器功能的记住密码?
- javascript - React javascript检查字符串是否包含特定单词并将链接反应路由器/样式添加到特定单词
- angular - 只有 2 位小数的角形输入?
- spring - 在一周中的不同日子的两个不同时间运行带有 Spring @Scheduled 注释的作业
- r - 提交按钮的 ExpectUpdate
- javascript - navigateByUrl 在使用 IONIC4 的加载服务中不起作用
- android - 通过 Android JNI 上的 Appsrc Gstreamer 接收视频数据缓冲区
- flutter - 如何:创建不是 GridView 而是在 CustomScrollView 内滚动的动态图像网格?(颤振网络)
- powershell - 使用 rest-api 导入 pbix 文件时出现 MultiPartMimeStreamFormatException 错误