繁体   English   中英

我正在尝试使用 oops 开发 tkinter 应用程序但收到此错误

[英]I'm trying to develop tkinter app using oops but getting this error

我刚刚开始练习 Oops 概念。我正在观看简单的 Oops 视频并尝试对 tkinter 问题使用应用步骤。 我不知道为什么会收到此错误。

from tkinter import *
from tkinter import font as tkFont

top = Tk()
top.minsize(width=1280,height=720)
top.maxsize(width=721,height=521)
class Framesone:
    def __init__(self, x1, y1, frame1, text1, x2, y2):
        self.stframe = LabelFrame(top, width=300, height=200, highlightcolor="grey", bd=5)
        self.stframe.place(x=x1, y=y1)
        self.label1 = Label(frame1, text=text1)
        self.label1.config(font=("Times", "25", "bold", "italic"))
        self.label1.place(x=x2, y=y2)
Framesone(100,200,Framesone().stframe,"HI",20,30)
top.mainloop()

OUTPUT

Traceback (most recent call last):
  File "E:/python projects my/Basic Programs/MQC FIt Software.py", line 14, in <module>
    Framesone(100,200,Framesone().stframe,"HI",20,30)
TypeError: __init__() missing 6 required positional arguments: 'x1', 'y1', 'frame1', 'text1', 'x2', and 'y2'

Process finished with exit code 1
Framesone(100,200,Framesone().stframe,"HI",20,30)

Framesone().stframe在没有 arguments 的情况下调用__init__ function。 每次调用MyClass()时,都会调用__init__ function ,因为 class 会被调用。

当您调用Framesone().stframe时,代码首先调用 Framesone() 的__init__() Framesone() ,但没有任何 arguments。 在声明 object 本身之前,您正在使用对象的实例变量。

由于您已经在 object 中定义了stframe ,您可以简单地用self.stframe替换对frame1的引用,因为在您的示例中这些是相同的。

class Framesone:
    def __init__(self, x1, y1, text1, x2, y2):
        self.stframe = LabelFrame(top, width=300, height=200, highlightcolor="grey", bd=5)
        self.stframe.place(x=x1, y=y1)
        self.label1 = Label(self.stframe, text=text1)
        self.label1.config(font=("Times", "25", "bold", "italic"))
        self.label1.place(x=x2, y=y2)

Framesone(100, 200, "HI", 20, 30)

如果您确实想以现在使用的方式使用此stframe ,您可以将stframe声明移到__init__() function 之外。 这会将stframe从实例变量更改为 static 变量。 这将允许您从 class 外部调用Framesone.stframe ,而无需调用其构造函数。 (请注意,您现在调用Framesone没有()表示您正在使用其 static class 变量而不是实例变量。)

class Framesone:
    stframe = LabelFrame(top, width=300, height=200, highlightcolor="grey", bd=5)
    
    def __init__(self, x1, y1, frame1, text1, x2, y2):
        self.stframe.place(x=x1, y=y1)
        self.label1 = Label(self.frame1, text=text1)
        self.label1.config(font=("Times", "25", "bold", "italic"))
        self.label1.place(x=x2, y=y2)

Framesone(100, 200, Framesone.stframe, "HI", 20, 30)

编辑:从 class static 变量中删除self 为了更好地解释实例与 static 变量,稍微更改了措辞

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM