【问题标题】:_tkinter.TclError: unknown option "-image"_tkinter.TclError:未知选项“-image”
【发布时间】:2020-02-21 16:04:49
【问题描述】:

我在我的 linux 上使用 Page GUI builder 创建了一个 gui。它有一个框架和一个画布。我正在尝试在其中一个框架上播放视频。 现在,当我运行代码时,我得到 _tkinter.TclError: unknown option "-image" 错误。我尝试了类似的问题及其解决方案,但都没有奏效。 我正在使用 Python3。用于构建 GUI tkinter。

#! /usr/bin/env python
#  -*- coding: utf-8 -*-
#
# GUI module generated by PAGE version 4.22
#  in conjunction with Tcl version 8.6
#    Oct 25, 2019 12:16:56 PM IST  platform: Linux

import sys

try:
    import Tkinter as tk, threading
except ImportError:
    import tkinter as tk, threading

try:
    import ttk
    py3 = False
except ImportError:
    import tkinter.ttk as ttk
    py3 = True

import video_gui_support
import imageio
from PIL import Image, ImageTk

def vp_start_gui():
    '''Starting point when module is the main routine.'''
    global val, w, root
    root = tk.Tk()
    top = Toplevel1 (root)
    video_gui_support.init(root, top)
    root.mainloop()

w = None
def create_Toplevel1(root, *args, **kwargs):
    '''Starting point when module is imported by another program.'''
    global w, w_win, rt
    rt = root
    w = tk.Toplevel (root)
    top = Toplevel1 (w)
    video_gui_support.init(w, top, *args, **kwargs)
    return (w, top)

def destroy_Toplevel1():
    global w
    w.destroy()
    w = None


class Toplevel1:

    def stream(self, label):

        video_name = "intro.mp4" #This is your video file path
        video = imageio.get_reader(video_name)

        for image in video.iter_data():
            frame_image = ImageTk.PhotoImage(Image.fromarray(image))
            label.configure(image=frame_image)
            label.image = frame_image

    def __init__(self, top=None):
        print("Started")
        '''This class configures and populates the toplevel window.
           top is the toplevel containing window.'''
        _bgcolor = '#d9d9d9'  # X11 color: 'gray85'
        _fgcolor = '#000000'  # X11 color: 'black'
        _compcolor = '#d9d9d9' # X11 color: 'gray85'
        _ana1color = '#d9d9d9' # X11 color: 'gray85'
        _ana2color = '#ececec' # Closest X11 color: 'gray92'

        top.geometry("1920x1012+0+0")
        top.title("New Toplevel")

        self.Frame1 = tk.Frame(top)
        self.Frame1.place(relx=0.531, rely=0.01, relheight=0.983, relwidth=0.466)

        self.Frame1.configure(relief='groove')
        self.Frame1.configure(borderwidth="2")
        self.Frame1.configure(relief="groove")
        self.Frame1.configure(width=895)

        # Code to run video file
        thread = threading.Thread(target=self.stream, args=(self.Frame1,))
        thread.daemon = 1
        thread.start()


        self.Canvas1 = tk.Canvas(top)
        self.Canvas1.place(relx=0.005, rely=0.01, relheight=0.982
            , relwidth=0.521)
        self.Canvas1.configure(borderwidth="2")
        self.Canvas1.configure(relief="ridge")
        self.Canvas1.configure(selectbackground="#c4c4c4")
        self.Canvas1.configure(width=1001)


if __name__ == '__main__':
    vp_start_gui()

得到错误 -

Started
Exception in thread Thread-2:
Traceback (most recent call last):
  File "/usr/lib/python3.6/threading.py", line 916, in _bootstrap_inner
self.run()
  File "/usr/lib/python3.6/threading.py", line 864, in run
self._target(*self._args, **self._kwargs)
  File "video_gui.py", line 80, in stream
 label.configure(image=frame_image)
  File "/usr/lib/python3.6/tkinter/__init__.py", line 1485, in configure
return self._configure('configure', cnf, kw)
  File "/usr/lib/python3.6/tkinter/__init__.py", line 1476, in _configure
self.tk.call(_flatten((self._w, cmd)) + self._options(cnf))
_tkinter.TclError: unknown option "-image"

【问题讨论】:

  • IMO 这很可能是因为 tkinter 不支持多线程,因为只有一个线程,通常是主线程,可以使用它。非 GUI 线程通常会将其结果存储在 Queue 中,GUI 线程可以轮询并相应地更改用户界面。轮询通常使用通用的after() 方法完成。这里有很多使用它的例子。
  • 您在threading.Thread(target=self.stream, args=(self.Frame1,)) 中传递了一个Frame。框架不能将图像作为参数。

标签: python python-3.x user-interface tkinter tk


【解决方案1】:

您将Frame 的实例传递给stream。这是参数label。然后您尝试配置此框架的图像,但框架没有image 属性。

如果要显示图像,则需要创建Label 的实例或其他支持图像的小部件。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-29
    • 2021-01-17
    • 2012-08-18
    • 1970-01-01
    相关资源
    最近更新 更多