程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 更多編程語言 >> 編程綜合問答 >> python-Python關於Tkinter的多線程問題

python-Python關於Tkinter的多線程問題

編輯:編程綜合問答
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!!!!!!!!!!!"

最佳回答:


解決了哈,原來是exe_thread.join()引起的,它導致一直要等到線程執行完,刪掉就可以了

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved