2016-11-02 3 views
0

У меня проблемы с моим конструктором. Я получаю ошибку __init __() отсутствует 1 необходимые позиционная аргумент: 'Checkbutton'__init __() Отсутствующий аргумент: 'checkbutton' - Python

Update:

это мой главный файл:

from GUI_Rootmodule import GUI_Root 

gui_root = GUI_Root() 

это мой файл rootmodule :

from GUI_Unitmodule import Unit 
from tkinter import * 


class GUI_Root: 
def __init__(self): 
    print("hoi") 
    window = Tk() 
    window.title("Project: Embedded Systems") 

    rootframe = Frame(window, width=1800, height=750) 
    rootframe.pack() 

    Unit(rootframe) 

    window.mainloop() 

это мой Unitmodule:

from tkinter import * 


class Unit: 
def __init__(self, master, checkbutton): 
    self.frame1 = Frame(master)  #Frame voor labels, buttons, entries 
    self.frame1.pack() 

    # Checkbutton # 
    print("test frame") 
    self.var1 = IntVar() 
    self.checkbutton = checkbutton(self.frame1, text="Automatisch", variable=self.var1, onvalue= 1, offvalue= 0, pady=20).grid(row=0, column=0, sticky=E) 
    print("test checkbutton") 

    # Labels # 

    self.Extend_Label = Label(self.frame1, text="Uitrol afstand", pady=20).grid(row=2, column=0, sticky=E) 
    self.Retract_Label = Label(self.frame1, text="Inrol afstand", pady=20).grid(row=3, column=0, sticky=E) 
    self.Temperture_Label = Label(self.frame1, text="Temperatuur Trigger", pady=20).grid(row=4, column=0, sticky=E) 
    self.LightIntensity_Label = Label(self.frame1, text="Lichtintensiteit Trigger", pady=20).grid(row=5, column=0, sticky=E) 
    print("test label") 

    # Entry # 

    self.Extend_Entry = Entry(self.frame1).grid(row=2, column=1, sticky=E) 
    self.Retract_Entry = Entry(self.frame1).grid(row=3, column=1, sticky=E) 
    self.Temperture_Entry = Entry(self.frame1).grid(row=4, column=1, sticky=E) 
    self.LightIntensity_Entry = Entry(self.frame1).grid(row=5, column=1, sticky=E) 
    print("test entry") 
    # Buttons 

    self.A = Button(self.frame1, text ="Inrollen", padx=10, pady=20).grid(row=6, column=0) 
    self.B = Button(self.frame1, text ="Uitrollen", padx=10, pady=20).grid(row=6, column=1) 
    print("test button") 

Я попытался запустить в него, но он продолжает говорить, что я пропускаю аргумент, который я поместил в инициализации (я, мастер, Checkbutton)

Может ли кто-нибудь объяснить, что я здесь пропущу, и/или не так?

Обновление 2: Без кода контрольного кода остальное работает и отображает простой графический интерфейс. Это все еще не ясно, где именно я не хватает аргумент для Checkbutton

+3

Ну, ошибка говорит вам, что ваш класс Unit ожидает, что аргумент, но вы на самом деле не поставляет его, когда экземпляр класса (который вы не показан). –

+1

Пожалуйста, сначала исправьте свой отступ, затем опубликуйте полный traceback и _all_ соответствующий код (отредактируйте сообщение, просто не добавьте его в качестве комментариев). –

+0

Это. Мы даже не знаем, какой экземпляр вызывает проблему. –

ответ

1

Вы не предоставили все необходимые входные параметры на этой линии:

Unit(rootframe) 

Вы поставляется master, но не хватает Checkbutton. Класс должен быть создан со всеми необходимыми входными параметрами:

Unit(master, checkbutton) 

В качестве альтернативы, вы можете указать значения по умолчанию для входов и настроить код в функции соответственно:

class Unit(master=None,checkbutton=None): 
    ... 

Однако, это выглядит например, возможно, вы вообще не собираетесь передавать переменную checkbutton и должны просто включать tkinter Checkbutton. Если это то, что вам нужно, я включил код для этого ниже. Я избегал импорта звезды from tkinter import *, поэтому источник объектов более ясен. Я также объединил вещи в один и тот же модуль, поэтому все это работает как есть.

import tkinter as tk 

def main(): 
    gui_root = GUI_Root() 

class GUI_Root: 
    def __init__(self): 
     print("hoi") 
     window = tk.Tk() 
     window.title("Project: Embedded Systems") 

     rootframe = tk.Frame(window, width=1800, height=750) 
     rootframe.pack() 

     Unit(rootframe) 

     window.mainloop() 

class Unit: 
    def __init__(self, master): 
     self.frame1 = tk.Frame(master)  #Frame voor labels, buttons, entries 
     self.frame1.pack() 

     # Checkbutton # 
     print("test frame") 
     self.var1 = tk.IntVar() 
     self.checkbutton = tk.Checkbutton(self.frame1, text="Automatisch", variable=self.var1, onvalue= 1, offvalue= 0, pady=20).grid(row=0, column=0, sticky=tk.E) 
     print("test checkbutton") 

     # Labels # 

     self.Extend_Label = tk.Label(self.frame1, text="Uitrol afstand", pady=20).grid(row=2, column=0, sticky=tk.E) 
     self.Retract_Label = tk.Label(self.frame1, text="Inrol afstand", pady=20).grid(row=3, column=0, sticky=tk.E) 
     self.Temperture_Label = tk.Label(self.frame1, text="Temperatuur Trigger", pady=20).grid(row=4, column=0, sticky=tk.E) 
     self.LightIntensity_Label = tk.Label(self.frame1, text="Lichtintensiteit Trigger", pady=20).grid(row=5, column=0, sticky=tk.E) 
     print("test label") 

     # Entry # 

     self.Extend_Entry = tk.Entry(self.frame1).grid(row=2, column=1, sticky=tk.E) 
     self.Retract_Entry = tk.Entry(self.frame1).grid(row=3, column=1, sticky=tk.E) 
     self.Temperture_Entry = tk.Entry(self.frame1).grid(row=4, column=1, sticky=tk.E) 
     self.LightIntensity_Entry = tk.Entry(self.frame1).grid(row=5, column=1, sticky=tk.E) 
     print("test entry") 
     # Buttons 

     self.A = tk.Button(self.frame1, text ="Inrollen", padx=10, pady=20).grid(row=6, column=0) 
     self.B = tk.Button(self.frame1, text ="Uitrollen", padx=10, pady=20).grid(row=6, column=1) 
     print("test button")  

if __name__ == '__main__': 
    main()   
+0

Непонятно, что вы имеете в виду здесь. Я попытался добавить параметры в корневой каталог Unit. Но это не работает. Я не понимаю, что моя программа работает, если я вырезал контрольную кнопку, но выдает ошибки с помощью контрольной кнопки. – lloydd4

+0

. Как вы определили свой класс, вам нужно передать параметр 'checkbutton'. До сих пор вы только проходили в «master». Возможно, что-то вроде 'Unit (master = rootframe, checkbutton = my_checkbutton)' будет более явным. – Brian

+0

Я обновил ответ с кодом для включения контрольной кнопки, не передавая ее. Думаю, это может быть то, что вам нужно. – Brian

Смежные вопросы