首页 > 解决方案 > 如何获取 tkinter 自定义 GUI 对象的数组

问题描述

我正在尝试获取自定义 tkinter 对象的数组(它是一个显示视频流的 GUI 窗口)。

我在尝试编写的代码时遇到了错误。我创建了一个函数来制作自定义对象并尝试制作这些对象的数组。

我收到以下错误:

文件“array_videoFeeds.py”,第 60 行,在 app = FeedCams(root) 文件“array_videoFeeds.py”,第 8 行,在init self.initialize() 文件“array_videoFeeds.py”,第 54 行,在初始化 self.b = self.videowindow() 文件“array_videoFeeds.py”,第 11 行,在 videowindow self.videowindow = window NameError: name 'window' is not defined

这是我的python代码:

import tkinter as Tk
import numpy as np

class FeedCams(Tk.Frame):
   def __init__(self,parent):
      Tk.Frame.__init__(self, parent)
      self.parent = parent
      self.initialize()

   def videowindow(self):
      self.videowindow = window
      self.cap = cap
      self.width = self.cap.get(cv2.CAP_PROP_FRAME_WIDTH)
      self.height = self.cap.get(cv2.CAP_PROP_FRAME_HEIGHT)
      self.interval = 20 # Interval in ms to get the latest frame

      # Create canvas for image
      self.canvas = tk.Canvas(self.window, width=self.width, height=self.height)
#      self.canvas.grid(row=0, column=0)

      # Update image on canvas
      self.update_image()

      dynamic_windows.append(videowindow)

   def update_image(self):
      # Get the latest frame and convert image format
      self.image = cv2.cvtColor(self.cap.read()[1], cv2.COLOR_BGR2RGB) # to RGB
      self.image = Image.fromarray(self.image) # to PIL format
      self.image = ImageTk.PhotoImage(self.image) # to ImageTk format

      # Update image
      self.canvas.create_image(0, 0, anchor=tk.NW, image=self.image)

      # Repeat every 'interval' ms
      self.videowindow.after(self.interval, self.update_image)


   def initialize(self):
      '''
      Draw the GUI
      '''
      self.parent.title("RUN ON START TEST")       
      self.parent.grid_rowconfigure(1,weight=1)
      self.parent.grid_columnconfigure(1,weight=1)

      self.frame = Tk.Frame(self.parent)  
      self.frame.pack(fill=Tk.X, padx=5, pady=5)

      # Create a array of videos
      self.a = np.zeros((3,3))
      for i in range(0,self.a.shape[0]):
          for j in range(0,self.a.shape[1]):
               self.b = self.videowindow()
               self.b.grid(row=i,  column= j)

# Start the main program here               
if __name__ == "__main__": 
   root=Tk.Tk()
   app = FeedCams(root)   
   root.mainloop()

我怎样才能成功地完成这项工作?

更新: 我根据对self.a = np.zeros((3,3))的回复之一更改了代码行。

问题中已更新错误。

标签: pythontkinter

解决方案


推荐阅读