【问题标题】:Getting uknown unknown option "-alpha" error获取未知的未知选项“-alpha”错误
【发布时间】:2019-07-22 16:06:21
【问题描述】:

我收到一个未知选项 - alpha 错误。我不知道为什么。我正在尝试创建一个透明矩形,我需要设置 alpha 值来执行此操作。我想要它,这样当一个人按下透明矩形时,它就充当一个按钮。现在,只有矩形的轮廓作为按钮,我希望整个矩形的透明填充作为按钮。

class MainWindow(Tk):

   def __init__(self, *args, **kwargs):

        Tk.__init__(self, *args, **kwargs)
        container = Frame(self, width = 165, height = 165)
        container.grid(row = 0, columnspan = 4, rowspan = 
                          50,sticky=N+S+W+E, padx=55, pady=40)
        container.grid_rowconfigure(0, weight = 5)
        container.grid_columnconfigure(0, weight = 5)

        self.frames = {}
        for F in (StartPage, PageOne):
            frame = F(container, self)
            self.frames[F] = frame
        self.show_frame(StartPage)

   def show_frame(self,cont):
       frame = self.frames[cont]
       frame.tkraise()
       frame.grid(row = 0, column = 2, sticky = "nsew")

class StartPage(Frame,MainWindow):

  def create_rectangle(x1, y1, x2, y2, **kwargs):
       images = []
       if 'alpha' in kwargs:
          alpha = int(kwargs.pop('alpha') * 255)
          fill = kwargs.pop('fill')
          fill = root.winfo_rgb(fill) + (alpha,)
          image = Image.new('RGBA', (x2-x1, y2-y1), fill)
          images.append(ImageTk.PhotoImage(image))
          self.canvas.create_image(x1, y1, image=images[-1], 
                                      anchor='nw')
       self.canvas.create_rectangle(x1, y1, x2, y2, **kwargs)

 def __init__(self,parent,controller):

      frame = Frame.__init__(self, parent, width = 165, height = 165)
      self.canvas = Canvas(self, width = 165, height = 165)
      self.canvas.configure(highlightthickness=0, borderwidth=0)
      self.canvas.grid(pady=(25,0)
      self.filenamesBCRed = [img for img in glob.glob(pathBCred)] 
      self.filenamesBCRed_sorted = 
                              natsort.natsorted(self.filenamesBCRed)
      self.iter = 1 #iteration number
      self.img_num = 0
      self.count = 0
      (x,y) = left_bottom_coordinates[self.box_index]
      self.rect = create_rectangle(x,y, x+80,y+80, outline = 'red', 
                  width = 1, fill ='gray', alpha = .5)
      self.canvas.tag_bind(self.rect, '<Button-1>', self.onButton)

我收到一个未知选项 -alpha 错误。这是完整的错误信息:

Traceback (most recent call last):
  File "Interactive3", line 302, in <module>
    root = MainWindow()
  File "Interactive3", line 31, in __init__
    frame = F(container, self)
  File "Interactive3", line 72, in __init__
    self.canvas.create_rectangle(50, 50, 250, 150, fill='green', alpha=.5)
  File "/anaconda3/lib/python3.6/tkinter/__init__.py", line 2498, in create_rectangle
    return self._create('rectangle', args, kw)
  File "/anaconda3/lib/python3.6/tkinter/__init__.py", line 2477, in _create
    *(args + self._options(cnf, kw))))
_tkinter.TclError: unknown option "-alpha"

【问题讨论】:

  • 您已经定义了一个名为create_rectangle() 的函数,它采用alpha= 关键字参数。然后你继续调用 Tkinter 自己的 .create_rectangle() 方法,以某种方式期望它也接受这个参数。
  • 您发布的代码甚至无法编译,它无法引发TclError
  • @jasonharper 如何调用我创建的 create_rectangle() 函数?
  • 这不是因为未定义的变量,而是因为缩进损坏。我还说“您发布的代码”。无论您运行的其他代码是否可以编译,我不知道,因为我看不到它。
  • 始终将完整的错误消息(从单词“Traceback”开始)放在问题中(作为文本,而不是屏幕截图)。还有其他有用的信息。

标签: python tkinter


【解决方案1】:

由于您在类StartPage 中声明create_rectangle(...),因此您需要添加self 作为第一个参数。此外,images = [] 应更改为 self.images = [] 并移至类 __init__(...) 函数。由于您需要将键绑定到透明矩形,因此您还需要返回项目 ID:

class StartPage(Frame):
    def create_rectangle(self, x1, y1, x2, y2, **kwargs):
        if 'alpha' in kwargs:
            alpha = int(kwargs.pop('alpha') * 255)
            fill = kwargs.pop('fill')
            fill = self.winfo_rgb(fill) + (alpha,)
            image = Image.new('RGBA', (x2-x1, y2-y1), fill)
            self.images.append(ImageTk.PhotoImage(image))
            image_id = self.canvas.create_image(x1, y1, image=self.images[-1], anchor='nw')
        rect_id = self.canvas.create_rectangle(x1, y1, x2, y2, **kwargs)
        return image_id if image_id else rect_id

那你需要调用函数为self.create_rectangle(...):

    def __init__(self, parent, controller):
        ...
        self.images = []
        self.rect = self.create_rectangle(x,y, x+80,y+80, outline = 'red', width = 1, fill ='blue', alpha = .5)
        self.canvas.tag_bind(self.rect, '<Button-1>', self.onButton)

【讨论】:

    【解决方案2】:

    你必须将self. 添加到create_rectangle() 然后它会运行你的函数

    self.rect = self.create_rectangle(x,y, x+80,y+80, outline='red', width=1, fill='gray', alpha=.5)
    

    不要添加在画布中运行原始功能的self.canvas. - 没有选项alpha

    【讨论】:

      猜你喜欢
      • 2014-10-13
      • 1970-01-01
      • 2017-05-20
      • 2014-09-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-09-09
      相关资源
      最近更新 更多