cc86889241314 2015-12-22 05:59 采纳率: 50%
浏览 5852
已采纳

Python关于Tkinter的多线程问题

使用TKinter编写界面,实现选择测试用例并执行,最后打印出测试结果。功能是实现了,可是每次一点下开始执行,整个界面就失去响应了,要等到测试用例执行完了,界面才恢复响应,已经把执行用例和画界面分别作为单独的线程来处理了,为什么还是不行?
界面如下:
图片说明
相关代码如下:
def ExcuteSet():
global Exe_Flag
Exe_Flag=True
#执行测试用例
exe_thread= threading.Thread(target=ExecuteCase)
exe_thread.setDaemon(True)
exe_thread.start()
exe_thread.join()
def Interface():
global ComX,Baud,TBuf
global txt1,txt2,txt3
# 界面
root.title(u'自动化测试工具')
root.geometry('800x600')

#滚动条
scroll1=Tk.Scrollbar(root,orient=Tk.VERTICAL)  #滚动条
scroll1.pack(fill="y",side='right')
txt1 = Tk.Text(root,width=60,height=20,border=5,yscrollcommand=scroll1.set)
txt1.pack(side='right',padx=3,pady=1,anchor='c')
txt1.bind("<Key>",TextKey)
scroll1.config(command=txt1.yview)
txt1.place(x=300,y=300)
#scroll1.place(x=750,y=300)
#操作按钮
TBuf = StringVar()

cnv1 = tk.Canvas(root,height=260,width=260)
cnv1.pack(side='bottom',padx=0,pady=0,anchor='c')
cnv1.create_window(60,40,window=ttk.Label(root,text=u'串口号: '))
cnv1.create_window(165,40,window=ttk.Combobox(root,textvariable=ComX,values=['COM1', 'COM2', 'COM3','COM4','COM5', 'COM6', 'COM7','COM8'],width=12))
cnv1.create_window(60,80,window=ttk.Label(root,text=u'波特率: '))
cnv1.create_window(165,80,window=ttk.Combobox(root,textvariable=Baud,values=['4800','9600','14400','19200','38400','57600','115200'],width=12))
cnv1.create_window(70,120,window=ttk.Label(root,text=u'输入目录: '))
cnv1.create_window(240,120,window=ttk.Entry(root,textvariable=TBuf,width=40))
cnv1.create_window(80,150,window=ttk.Button(root,textvariable=OpenOff,command=COMOpen,width=12))
cnv1.create_window(80,180,window=ttk.Button(root,text=u'选择用例',command=SelectCase,width=12))
cnv1.create_window(80,210,window=ttk.Button(root,text=u'开始执行',command=ExcuteSet,width=12))
cnv1.create_window(80,240,window=ttk.Button(root,text=u'停止测试',command=StopTest,width=12))
cnv1.create_window(175,180,window=ttk.Button(root,text=u'清除用例',command=ClearCase,width=12))
cnv1.place(x=320,y=0)
#滚动条
scroll2=Tk.Scrollbar(root,orient=Tk.VERTICAL)  #滚动条
scroll2.pack(fill="y",side='left')
#显示测试用例   
txt2 = Tk.Text(root,width=40,height=20,border=5,yscrollcommand=scroll2.set)
txt2.pack(padx=3,pady=1,anchor='c')
scroll2.config(command=txt2.yview)
txt2.place(x=0,y=0)
scroll2.place(x=300,y=0)
#显示测试用例执行情况
txt3 = Tk.Text(root,width=40,height=20,border=5)
txt3.pack(padx=3,pady=1,anchor='c')
txt3.place(x=0,y=300)

root.mainloop()   

if name=='__main__':

isOpened.clear()
Init()   #初始化
Opencom()
threads=[]
#读串口数据
com_thread = threading.Thread(target=COMTrce)
threads.append(com_thread)
#画界面
inter_thread = threading.Thread(target=Interface)
threads.append(inter_thread)
#执行用例
#exe_thread= threading.Thread(target=ExecuteCase)
#threads.append(inter_thread)
for t in threads:
    t.setDaemon(True)
    t.start()
for t in threads:
    t.join() 
print "Over!!!!!!!!!!!"

  • 写回答

1条回答 默认 最新

  • cc86889241314 2015-12-22 07:15
    关注

    解决了哈,原来是exe_thread.join()引起的,它导致一直要等到线程执行完,删掉就可以了

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 请问各位,如何在Jetson nano主控板的Ubuntu系统中安装PyQt5
  • ¥15 MAC安装佳能LBP2900驱动的网盘提取码
  • ¥400 微信停车小程序谁懂的来
  • ¥15 ATAC测序到底用什么peak文件做Diffbind差异分析
  • ¥15 安装ubantu过程中第一个vfat 文件挂载失败
  • ¥20 GZ::CTF如何兼容一些靶机?
  • ¥15 etcd集群部署问题
  • ¥20 谁可以帮我一下问一下各位
  • ¥15 为何重叠加权后love图的SMD与svyCreateTableOne函数绘制基线表的不一致
  • ¥150 求 《小魔指》街机游戏机整合模拟软件