【问题标题】:generating Another thread in Python在 Python 中生成另一个线程
【发布时间】:2015-01-11 04:47:45
【问题描述】:

Python 新手,基本上我有一个带有几个按钮的窗口 UI,当我按下一个按钮时,我想开始在后台处理/解析文件,同时我仍然可以使用 UI,但是我的 UI 变得无响应“旋转”轮子”。

class MyUI(Frame):

def __init__(self, parent):

    Frame.__init__(self, parent, background="white") 
    self.parent = parent
    self.initUI()


def initUI(self):
 self.validate_button = Button(self,
                text='Validate',
                command=self.validate_files).pack()

def validate_files(self):
    try:
        t = Thread(target=self.process_files(), args=('labala',1))
        t.start
        t.join
    except Exception, errtxt:
        print errtxt

 def process_colls(self):
    items = self.lb.curselection()
    for i in items:
        self.do_parse(self.varDirName, self.lb.get(int(i)))

def main():
root = Tk()
root.geometry("600x600+300+300")
app = MyUI(root)
root.mainloop() 

if __name__=="__main__":
   main()

【问题讨论】:

  • 对我来说,您的代码只是一个空白屏幕。你有什么遗漏吗?
  • 请修正缩进。如果没有正确的缩进,Python 是无法解释的。
  • 不只是缩进...在validate_files() 你只会发现你的语法错误:)
  • 尝试提供完整的工作代码 - 我们必须为您做额外的工作来重现您遇到的行为。
  • 这种情况下的语法并不详细:如果执行了validate_files() 中的join(),则可能会出现问题。如果您不修复代码,则无法尝试猜测问题出在哪里。

标签: python multithreading tkinter


【解决方案1】:

self.process_files() 替换为您创建线程的self.process_files

t = Thread(target=self.process_files, args=('labala',1))

您应该将函数作为目标而不是结果传递给线程。

此外,如果您希望函数在线程运行时返回,请不要使用join()

【讨论】:

  • self.process_files 不会触发函数,self.process_files() 会,但仍然没有响应。这是一个问题,items = self.lb.curselection(),因为它从主 UI 读取列表?
  • @user1529412 是 self.process_file() 函子吗? target 应该是回调而不是值。如果self.process_file() 返回一个我将删除的函数可能会回答,但你必须解决你的问题,因为现在不可能理解发生了什么。
  • 嗯,我明白了,我会玩的,知道为什么 self.process_files 没有被触发吗?
  • 如果你用t.start()替换t.start,它可能会被触发。
  • @user1529412 正如我在之前的评论中所写的,语法不是细节。
【解决方案2】:

尝试使用threading.Thread 启动线程。这个sn-p应该能帮你找到更多答案

from threading import Thread

...

_thread = Thread(target=lambda: my_func())
_thread.start()

在您的示例中,您忘记了调用方法的括号。

【讨论】:

  • 函数触发良好,我确实得到了正确的结果。你的说法和我的一样,我都试过了。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-12-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-01-03
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多