Ошибка: __init __ () принимает от 1 до 2 позиционных аргументов, но задано 3 (Python: tkinter) - PullRequest
0 голосов
/ 17 октября 2019

Фрагмент кода:

import tkinter as tk
from tkinter import ttk
from tkinter import filedialog


class BirdsEye(tk.Tk):
    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)
        self.title("Hello Tkinter")
        self.geometry("480x320")
        self.resizable(width = False, height = False)
        FeatureExtractionView(self).grid(sticky=(tk.E + tk.W + tk.N + tk.S))

class FeatureExtractionView(tk.Frame):


    def __init__(self, parent = None, *args, **kwargs):
        super().__init__(parent, *args, **kwargs)
        self.parent = parent
        self.object_list = ['human', 'cat']
        self.draw_widgets(parent)

    def get_object_list(self):
        return self.object_list

    def draw_widgets(self, parent):
        # Parent container to hold widgets for parameter selection
        container = ttk.LabelFrame(parent, text = "Feature Extraction Parameters")
        container.grid(row = 0, column = 0, padx = 5, pady = 5)
        parent.rowconfigure(0, weight = 1)
        parent.columnconfigure(0, weight = 1)

        object_combo = ttk.Combobox(container, self.get_object_list())
        object_combo.grid(row = 1, column = 0)
        container.rowconfigure(1, weight = 1)
        container.columnconfigure(0, weight = 1)

Трассировка стека:

---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-144-8f8ef2b5022b> in <module>
----> 1 app = BirdsEye()
      2 app.mainloop()

<ipython-input-141-cead3bb4d34c> in __init__(self, *args, **kwargs)
      5         self.geometry("480x320")
      6         self.resizable(width = False, height = False)
----> 7         FeatureExtractionView(self).grid(sticky=(tk.E + tk.W + tk.N + tk.S))

<ipython-input-143-b47db92b9d00> in __init__(self, parent, *args, **kwargs)
      6         self.parent = parent
      7         self.object_list = ['human', 'cat']
----> 8         self.draw_widgets(parent)
      9 
     10     def get_object_list(self):

<ipython-input-143-b47db92b9d00> in draw_widgets(self, parent)
     18         parent.columnconfigure(0, weight = 1)
     19 
---> 20         object_combo = ttk.Combobox(container, self.get_object_list())
     21         object_combo.grid(row = 1, column = 0)
     22         container.rowconfigure(1, weight = 1)

TypeError: __init__() takes from 1 to 2 positional arguments but 3 were given

Я создаю небольшой пользовательский интерфейс для проекта колледжа. Представление должно иметь поле со списком значений. Я пытаюсь передать переменную-член object_list в комбинированный список в виджете LabelFrame с помощью метода _getter. Тем не менее, это не работает. Также, если у кого-то есть хорошие ресурсы для tkinter, пожалуйста, предоставьте его.

Обновление: добавлена ​​трассировка стека.

1 Ответ

1 голос
/ 17 октября 2019

Вам необходимо указать значения в выпадающем списке с помощью опции values:

object_combo = ttk.Combobox(container, values=self.get_object_list())
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...