Python 在导入模块之前启动Tkinter GUI(延迟导入,直到某个类实例化) 免责声明*嘿,在有人说这个问题已经存在之前,我已经检查过他们是否与我试图做的事情无关,或者我不理解他们。例如,我尝试了一个闪屏 但在外部脚本完成导入之前,它仍然不会启动

Python 在导入模块之前启动Tkinter GUI(延迟导入,直到某个类实例化) 免责声明*嘿,在有人说这个问题已经存在之前,我已经检查过他们是否与我试图做的事情无关,或者我不理解他们。例如,我尝试了一个闪屏 但在外部脚本完成导入之前,它仍然不会启动,python,python-3.x,tkinter,module,python-import,Python,Python 3.x,Tkinter,Module,Python Import,好的,我有一个tkinter应用程序,它使用来自外部脚本的后端函数。该脚本使用的是大型数据集,因此计算需要15-20秒,尽管初始加载后没有延迟 问题是,当我将此函数导入tkinter GUI脚本时,它需要一段时间才能启动,因为它正在加载模块 我想知道是否有一种方法可以先启动GUI,然后在应用程序运行时加载模块,或者在模块导入时启动加载屏幕 任何有用的链接都可以,我尝试过在外部脚本中使用构造函数,但在该脚本中,我在任何函数之外都有一堆代码,因为该脚本中的所有函数都需要这些代码 提前谢谢你的建议 代

好的,我有一个tkinter应用程序,它使用来自外部脚本的后端函数。该脚本使用的是大型数据集,因此计算需要15-20秒,尽管初始加载后没有延迟

问题是,当我将此函数导入tkinter GUI脚本时,它需要一段时间才能启动,因为它正在加载模块

我想知道是否有一种方法可以先启动GUI,然后在应用程序运行时加载模块,或者在模块导入时启动加载屏幕

任何有用的链接都可以,我尝试过在外部脚本中使用构造函数,但在该脚本中,我在任何函数之外都有一堆代码,因为该脚本中的所有函数都需要这些代码

提前谢谢你的建议

代码:


看起来您将数据加载与UI构建相结合。他们不必那样。将其解耦,使其仅在单击按钮后加载,或使用
after()
延迟或加载小块数据。或者使用一些人会说的线程。请参阅
方法之后的

看起来您将数据加载与UI构建耦合在一起。他们不必那样。将其解耦,使其仅在单击按钮后加载,或使用
after()
延迟或加载小块数据。或者使用一些人会说的线程。查看
之后的
方法。

哈哈,我解决了它。要延迟导入直到类被实例化,导入必须在方法内部

像这样:

def GetPartial(self): 
    from Content import get_id_from_partial_name #import here 
    partial=self.NameEntry.get()
    get_id_from_partial_name(partial).

def Rec(self):
    from Content import print_similar_animes # import here
    user_anime=self.NameEntry2.get()
    print_similar_animes(user_anime)

注意-将导入放在类内部但放在任何方法外部仍然会导致在初始化模块时发生导入。

哈哈,我解决了这个问题。要延迟导入直到类被实例化,导入必须在方法内部

像这样:

def GetPartial(self): 
    from Content import get_id_from_partial_name #import here 
    partial=self.NameEntry.get()
    get_id_from_partial_name(partial).

def Rec(self):
    from Content import print_similar_animes # import here
    user_anime=self.NameEntry2.get()
    print_similar_animes(user_anime)

注意-将导入放在类内但放在任何方法外仍然会导致在模块初始化时发生导入。

我用一些代码更新了我的帖子,这些函数应该只在单击按钮后执行。我尝试在函数后添加.after(xtime),但没有work@MollerRodrigues它本身不会工作,我的意思是它会注册一个小部件回调,在某个时间后调用,并且可以在回调中重新注册以重复,所以它可以用于后台处理,但剩下的工作你们必须对它进行编码,它允许gui刷新或执行其他操作。你自己的回答既巧妙又精细,因为它实际上是你所要求的一种方式。虽然我不太喜欢它在代码中的导入位置频繁使用,但对于有问题的缓慢导入,它是一个解决方案。感谢您的帮助m8,事后看来,考虑到我使用的数据集,一次性15秒加载时间并不是不现实的tbh。我用一些代码更新了我的帖子,这些功能只能在单击按钮后执行。我尝试在函数后添加.after(xtime),但没有work@MollerRodrigues它本身不会工作,我的意思是它会注册一个小部件回调,在某个时间后调用,并且可以在回调中重新注册以重复,所以它可以用于后台处理,但剩下的工作你们必须对它进行编码,它允许gui刷新或执行其他操作。你自己的回答既巧妙又精细,因为它实际上是你所要求的一种方式。虽然我不太喜欢频繁使用它,但对于代码中的导入位置,但对于有问题的缓慢导入,它是一个解决方案。感谢您的帮助,事后看来,考虑到我使用的数据集,一次性15秒加载时间并不是那么不现实。