【问题标题】:Python class methods always get executed twicePython 类方法总是被执行两次
【发布时间】:2013-04-02 17:18:51
【问题描述】:

我是 Python 新手,遇到了一个问题:Gui 类中的方法总是被执行两次。

这里是继承自Tkinter的gui类:

from Tkinter import *

class Gui (Tk):
    def createKdWindow(self):
        print("createKdWindow has been triggered")

    def activate(self):
        print ("activate has been triggered")
        self.tk.mainloop()

这里是从 (init.py) 调用方法的地方:

from pm_test.gui import Gui

datgui = Gui()
datgui.createKdWindow()
datgui.activate()

当我运行我的程序时,我得到以下控制台输出:

createKdWindow has been triggered
activate has been triggered
createKdWindow has been triggered
activate has been triggered

所以我的方法被执行了两次。我不知道这是从哪里来的。有人知道怎么解决吗?

固定:init.py 中的代码放入新模块可解决此问题!

【问题讨论】:

  • 我曾经遇到过类似的奇怪事件,但发生在完全不相关的库上。 stackoverflow.com/questions/10898218/… - 代码被重写(或至少被大量重构),但我从未发现真正的问题是什么。我认为我运行的是 Python 2.6.6 - 你也是这种情况吗?
  • 我尝试在 Python 2.7.3 上逐字运行该代码,但无法重现该问题。你用的是什么 Python 版本?
  • 我无法在 python2.7.3 上重现这个(我把它全部放在一个文件中)。如果将所有内容放在一个文件中,问题会消失吗?
  • 也许您的 pm_test 包包含一个包含一些冗余代码的__init__.py 脚​​本?或者也许 PYTHONPATH 正在选择不同版本的 pm_test.gui?
  • 您的pm_test.gui 文件是否包含类外的测试代码?如果是这样,这可能会在导入中执行。把它放在if __name__ == "__main__" 中以避免这种情况。

标签: python class methods tkinter


【解决方案1】:

已修复:将 init.py 中的代码放入新模块可修复此问题!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-09
    • 1970-01-01
    相关资源
    最近更新 更多