【问题标题】:__init__() missing argument: 'checkbutton' - Python__init__() 缺少参数:'checkbutton' - Python
【发布时间】:2016-11-02 12:24:36
【问题描述】:

我的构造函数有问题。我收到错误 __init__() missing 1 required positional argument: 'checkbutton'

更新:

这是我的主文件:

from GUI_Rootmodule import GUI_Root

gui_root = GUI_Root()

这是我的根模块文件:

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()

这是我的单元模块:

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")

我尝试在其中运行,但它一直说我缺少我在 init(self, master, checkbutton) 中输入的参数

有人可以解释我在这里缺少什么和/或做错了吗?

更新 2: 没有检查按钮代码,其余的工作并显示一个简单的 GUI。目前还不清楚我到底在哪里错过了 checkbutton 的参数

【问题讨论】:

  • 嗯,错误是告诉你你的 Unit 类期待那个参数,但是当你实例化这个类时你实际上并没有提供它(你没有显示)。
  • 请先修复您的缩进,然后发布完整的回溯和所有相关代码(编辑您的帖子,不要只是将其添加为 cmets)。
  • 这个。我们甚至不知道是哪个实例化导致了问题。
  • 我刚刚添加了其余代码

标签: python python-3.x constructor


【解决方案1】:

您没有在这一行提供所有必需的输入参数:

 Unit(rootframe)

您提供了master,但缺少检查按钮。应该使用所有必需的输入参数来实例化该类:

Unit(master, checkbutton)

或者,您可以为输入提供默认值并相应地调整函数中的代码:

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

但是,看起来您可能根本不打算传入一个检查按钮变量,而只是包含一个 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()        

【讨论】:

  • 不清楚你在这里的意思。我试图将参数添加到 Unit rootframe。但它不起作用。我不明白的是,如果我删除了检查按钮,但检查按钮出现错误,我的程序可以工作
  • 您定义类的方式要求您传入checkbutton 参数。到目前为止,您只通过了master。也许像Unit(master=rootframe,checkbutton=my_checkbutton) 这样的东西会更明确。
  • 我用包含检查按钮的代码更新了答案,而无需传递它。我认为这可能就是您所追求的。
  • 我想通了。我在不应该存在的单元的构造函数中有“checkbutton”。在我创建检查按钮的地方,我错过了 Checkbutton 的大写 C(是检查按钮)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-04
  • 1970-01-01
  • 2023-03-27
  • 2023-03-22
  • 2021-09-15
  • 2019-02-08
相关资源
最近更新 更多