我想同時打開 tkinter 視窗和 opencv 視窗。請幫助我同時運行它們。我怎樣才能做到這一點?這是代碼:
import numpy as np
import cv2
from mss import mss
from PIL import Image
import pyautogui
import pyautogui as pg
import tkinter as tk
mon = {'left': 500, 'top': 500, 'width': 500, 'height': 500}
root = tk.Tk()
root.geometry("400x300")
root.title("Tkinter")
root.attributes('-transparentcolor',
'red')
root.config(bg='red')
root.mainloop()
with mss() as sct:
while True:
screenShot = sct.grab(mon)
img = Image.frombytes(
'RGB',
(screenShot.width, screenShot.height),
screenShot.rgb,
)
cv2.imshow('ProjectZero', np.array(img))
if cv2.waitKey(33) & 0xFF in (
ord('q'),
27,
):
break
但每次我嘗試,接下來都會發生:
- tkinter 視窗打開,我關閉它后,打開 opencv 視窗。(我需要同時打開它們)
- tkinter 視窗和 opencv 視窗同時打開。但是opencv不會重繪 視窗。僅當我為 tkinter 視窗發送垃圾郵件關閉按鈕時。
- 或者在關閉 tkinter 視窗之后。打開 Opencv 視窗并正常作業。但我無法再打開 tkinter 視窗。
uj5u.com熱心網友回復:
我寫了一個小代碼,所以你可以弄清楚。我的程式通過 OpenCV 顯示一個 tkinter 視窗和我的網路攝像頭視窗。它們并行運行,互不干擾。多虧了 threading 模塊(它是一個內置的 python 模塊),我做到了這一點。該模塊允許您并行運行行程。
from tkinter import *
import cv2
from threading import *
def window_Tk():
root = Tk()
root.geometry('200x200')
btn = Button(root, text='click').pack()
root.mainloop()
def window_CV():
cap = cv2.VideoCapture(0)
while True:
ret, frame = cap.read()
cv2.imshow('frame', frame)
if cv2.waitKey(1) & 0xFF == ord('q'):
break
if cv2.getWindowProperty('frame',1) == -1 :
break
cap.release()
cv2.destroyAllWindows()
t1 = Thread(target=window_Tk)
t2 = Thread(target=window_CV)
t1.start()
t2.start()
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/529391.html
標籤:Pythonopencvtkinterwhile循环窗户
