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

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()引起的,它导致一直要等到线程执行完,删掉就可以了

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

报告相同问题?

悬赏问题

  • ¥30 帮我写一段可以读取LD2450数据并计算距离的Arduino代码
  • ¥15 C#调用python代码(python带有库)
  • ¥15 矩阵加法的规则是两个矩阵中对应位置的数的绝对值进行加和
  • ¥15 活动选择题。最多可以参加几个项目?
  • ¥15 飞机曲面部件如机翼,壁板等具体的孔位模型
  • ¥15 vs2019中数据导出问题
  • ¥20 云服务Linux系统TCP-MSS值修改?
  • ¥20 关于#单片机#的问题:项目:使用模拟iic与ov2640通讯环境:F407问题:读取的ID号总是0xff,自己调了调发现在读从机数据时,SDA线上并未有信号变化(语言-c语言)
  • ¥20 怎么在stm32门禁成品上增加查询记录功能
  • ¥15 Source insight编写代码后使用CCS5.2版本import之后,代码跳到注释行里面