在python中调用模块内的线程

2024-04-20 07:44:19 发布

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

我有一个登录屏幕,从一个名为“HomescreenscrollCopy31”的文件调用一个模块。这个很好用。你知道吗

唯一的问题是模块中有一个线程似乎无法运行。你知道吗

以下是登录屏幕中的代码:

def login():
    content = nameentry.get()
    content1 = IDentry.get()
    if content == "1" and content1 == "1":
        root.destroy()
        from HomescreenscrollCopy31 import FullScreenApp

HomescreenscrollCopy31.py文件如下所示

class FullScreenApp(object):
     def __init__(self, master, **kwargs):
        self.master=master
        pad=3
        self._geom='200x200+0+0'
        master.geometry("{0}x{1}+0+0".format(
            master.winfo_screenwidth()-pad, master.winfo_screenheight()-pad))
        master.bind('<Escape>',self.toggle_geom)            
    def toggle_geom(self,event):
        geom=self.master.winfo_geometry()
        print(geom,self._geom)
        self.master.geometry(self._geom)
        self._geom=geom

    def trick(threadName, sleepTime):
        while 1 < 2:
            .....

    try:
        t = threading.Thread(target=trick, args=("Trick running", 5))
        t.daemon = True
        t.start()
    except: Exception,
    print "start up"

似乎它运行在HomescreenscrollCopy31.py中,礼貌地打印“start up”只是为了取笑我,因为它实际上从未运行线程,因此应该打印“Trick running”输出。你知道吗

为什么会这样?你知道吗


Tags: 模块文件selfmasterget屏幕defcontent
1条回答
网友
1楼 · 发布于 2024-04-20 07:44:19

我觉得这样写比较好。你知道吗

def login():
    content = nameentry.get()
    content1 = IDentry.get()
    if content == "1" and content1 == "1":
        root.destroy()
        from HomescreenscrollCopy31 import FullScreenApp
        myFullScreenApp = FullScreenApp(...)  # you need to give it some input, like master, to initialize an instance for FullScreenApp class




class FullScreenApp(object):

    def __init__(self, master, **kwargs):
        self.master=master
        pad=3
        self._geom='200x200+0+0'
        master.geometry("{0}x{1}+0+0".format(
            master.winfo_screenwidth()-pad, master.winfo_screenheight()-pad))
        master.bind('<Escape>',self.toggle_geom)   

        # these code will be executed when instance initializing 
        t = threading.Thread(target=self.trick, args=["Trick running", 5])
        t.daemon = True
        t.start()


    def toggle_geom(self,event):
        geom=self.master.winfo_geometry()
        print(geom,self._geom)
        self.master.geometry(self._geom)
        self._geom=geom

    def trick(threadName, sleepTime):
        while 1 < 2:
            .....
  1. 您只需要初始化类的一个实例就可以获得线程 跑步。如果使用staticmethod的方式,会使代码更加复杂 我不建议这么复杂。你知道吗
  2. 调用新线程时,args应该是列表([]),而不是 元组(())。你知道吗
  3. 您可以使用while 1而不是while 1<;2。不管怎样,这不是 主要问题。:)

希望有帮助。你知道吗

相关问题 更多 >