在python3中,从外部类运行函数会创建重复的

2024-10-04 03:27:41 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图从当前类之外调用reset函数(这最终会调用多个类上的reset),但我得到的似乎是再次运行完整类的程序,而不仅仅是该类中的函数。你知道吗

怎么回事?你知道吗

from tkinter import *

root = Tk()

class Scores1(Frame):
    def __init__(self, parent=None, **kw):
        Frame.__init__(self, parent, kw)
        self.team1 = 888
        self.team1str = StringVar()
        self.teamA()

    def teamA(self):
        self.team1str.set('%03d' % (self.team1))
        t1 = Label(textvariable=self.team1str, font=("Digiface", 120), fg='#fffd80000', bg='black')
        t1.grid()

    def ScoreA1(self):
        self.team1 = self.team1 + 1
        self.team1str.set('%03d' % (self.team1))

    def Reset(self):
        self.team1 = 0
        self.team1str.set('%03d' % (self.team1))

class Resetter(Frame):
    def __init__(self, parent=None, **kw):
        Frame.__init__(self, parent, kw)

    def reset(self):
        Scores1().Reset


def main():


    sc1 = Scores1(root)
    sc1.grid(row=0, column=0)
    res = Resetter(root)

    sc1.configure(highlightbackground='white', highlightthickness=2)
    root.configure(background = 'black')

    Button(root, text='Team A +1', command=sc1.ScoreA1).grid(row=1, column=0)
    Button(root, text='ResetInside', command=sc1.Reset).grid(row=2, column=0)
    Button(root, text='ResetOutside', command=res.reset).grid(row=3, column=0)

    root.mainloop()

if __name__ == '__main__':
    main()

Tags: selfinitdefcolumnrootframegridparent
1条回答
网友
1楼 · 发布于 2024-10-04 03:27:41

首先,您的代码中有一个输入错误:

Scores1().Reset

创建Scores1的新实例,然后返回方法Reset。要实际调用Reset,请附加()。你知道吗

下一个问题是Scores1()创建一个新实例。但是您想在sc1上调用Reset()。解决方法是将sc1传递给Resetter

class Resetter(Frame):
    def __init__(self, sc1, parent=None, **kw):
        Frame.__init__(self, parent, kw)
        self.sc1 = sc1
    ...

    def reset(self):
        self.sc1.Reset()

res = Resetter(sc1, root)

相关问题 更多 >