python带GUI的程序中怎么加入多线程

milosz 2012-07-24 05:27:22
现在有一个使用GUI的程序,但是程序中的函数要处理的东西很多,每次一运行的时候,程序界面就卡死在那里,但是还在处理数据,这样感觉怪别扭呢。想用多线程来处理一下,可是我不知道从何下手,那些讲解多线程的书都是用函数示例,现在一到这个类中,整个GUI的调用只在self.__init__()函数中的那个self.top=Tk()就实现了,我不知道怎么建立线程了。整个程序结构如下:这个例子只是个简化

import tkFileDialog
import os
from Tkinter import *


class App(object):
def __init__(self):
self.top=Tk()

self.button1=Button(self.top,text="open",fg="red",command=self.inputnumber)
self.button1.pack()

language=IntVar()
language.set(1)
self.language_option1=Radiobutton(self.top,variable=language,text='English',value=1,command=self.l1)
self.language_option1.pack()
self.language_option2=Radiobutton(self.top,variable=language,text='Japan',value=2,command=self.l2)
self.language_option2.pack()

typ=IntVar()
typ.set(2)
self.type_option1=Radiobutton(self.top,variable=typ,text='SMD3',value=1,command=self.v1)
self.type_option1.pack()
self.type_option2=Radiobutton(self.top,variable=typ,text='SMLD5',value=2,command=self.v2)
self.type_option2.pack()

self.out_text=Text(self.top)
self.out_text.pack()
fp=open('saul issue.txt')
temp_file=fp.readlines()
fp.close()
for list_ in temp_file:
self.out_text.insert(CURRENT,list_)


self.autorun=Button(self.top,text="run",fg="blue",command=self.autopack)



def inputnumber(self):
filename = tkFileDialog.askopenfilename(initialdir = 'c:/')
print filename
self.out_text.insert(CURRENT,filename+'\n')

def l1(self):
self.language='EN'
print self.language
self.out_text.insert(CURRENT,self.language+'\n')
def l2(self):
self.language='JP'
print self.language
self.out_text.insert(CURRENT,self.language+'\n')
def v1(self):
self.version='SMD3'
print self.version
self.out_text.insert(CURRENT,self.version+'\n')
def v2(self):
self.version='SMLD5'
print self.version
self.out_text.insert(CURRENT,self.version+'\n')

def autopack():
pass

def main():
app=App()
mainloop()

if __name__=='__main__':
main()

...全文
576 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
Jooquot_____ 2014-08-10
  • 打赏
  • 举报
回复
或者,lz你的理解是怎样加入多线程,我另起线程之后UI还是卡死
Jooquot_____ 2014-08-10
  • 打赏
  • 举报
回复
加入多线程之后ui会卡死,lz知道什么意思吗?
milosz 2013-07-11
  • 打赏
  • 举报
回复
现在理解了,所谓多线程就是用一个函数起一个线程
milosz 2012-07-26
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 的回复:]

木有注释的Python程序是木有办法看的。
[/Quote]
好的,我改一下。

import tkFileDialog
import os
from Tkinter import *


class App(object):
def __init__(self):
self.top=Tk()

self.button1=Button(self.top,text="open",fg="red",command=self.inputnumber)#一个控件
self.button1.pack()


def inputnumber(self): #控件的处理函数
filename = tkFileDialog.askopenfilename(initialdir = 'c:/')
print filename
self.out_text.insert(CURRENT,filename+'\n')


def main():
app=App()
mainloop()

if __name__=='__main__':
main()

改成这样应该很易看了吧,总的来说:self.top=Tk()这一句就把GUI加入了,但是假如我对数据的处理全依靠这个函数:def inputnumber(self):,并且数据的处理很多的话,我就应该加入多线程,以防止界面无响应。但是多线程应该怎么加入呢,我无从下手啊,跟C++的不一样啊。请各位老师朋友指点一下,应该怎么做才能加入多线程
qq120848369 2012-07-25
  • 打赏
  • 举报
回复
木有注释的Python程序是木有办法看的。
milosz 2012-07-25
  • 打赏
  • 举报
回复
怎么没人回答我啊,急求

37,721

社区成员

发帖
与我相关
我的任务
社区描述
JavaScript,VBScript,AngleScript,ActionScript,Shell,Perl,Ruby,Lua,Tcl,Scala,MaxScript 等脚本语言交流。
社区管理员
  • 脚本语言(Perl/Python)社区
  • IT.BOB
加入社区
  • 近7日
  • 近30日
  • 至今

试试用AI创作助手写篇文章吧