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

解决方案二:

python 多线程问题
关于python的多线程问题
[Python] Python 多线程 Envent 解决数据共享问题

时间: 2025-01-19 15:35:27

python-Python关于Tkinter的多线程问题的相关文章

用Python实现一个简单的多线程TCP服务器的教程

  这篇文章主要介绍了用Python实现一个简单的多线程TCP服务器的教程,示例的运行环境为Windows操作系统,需要的朋友可以参考下 最近看<python核心编程>,书中实现了一个简单的1对1的TCPserver,但是在实际使用中1对1的形势明显是不行的,所以研究了一下如何在server端通过启动不同的线程(进程)来实现每个链接一个线程. 其实python在类的设计上已经考虑到了这一方面的需求,我们只要在自己的server上继承一下SocketServer.BaseRequestHandl

php与python实现的线程池多线程爬虫功能示例_php技巧

本文实例讲述了php与python实现的线程池多线程爬虫功能.分享给大家供大家参考,具体如下: 多线程爬虫可以用于抓取内容了这个可以提升性能了,这里我们来看php与python 线程池多线程爬虫的例子,代码如下: php例子 <?php class Connect extends Worker //worker模式 { public function __construct() { } public function getConnection() { if (!self::$ch) { sel

[Python]Python/PHP如何查询sql server中NTEXT类型数据

[Python]Python/PHP如何查询sql server中NTEXT类型数据 Version Date Creator Description 1.0.0.1 2006-11-23 郑昀 草稿   继续阅读之前,我们假设您熟悉以下知识: n         Python / PHP n         SQL Server 2000 SP4以上版本的Microsoft sql server n         pymssql n         NTEXT类型 本文讨论了在Python中

Python写的Tkinter程序屏幕居中方法_python

本文适用场景:想用Tkinter开发界面程序并屏幕居中,但没找到相应的API. 这两天玩了玩Tkinter,感觉不错,就是屏幕居中这个问题在网上搜了很长时间也没 找到答案,最后没办法,看它的文档,用自己的方法实现了. 方法很土,就是获取初始化的窗体大小和屏幕大小,再通过计算得到大体值. 以下是代码: 复制代码 代码如下: #! /usr/bin/python '''   File      : screenCenter.pyw   Author    : Mike   E-Mail    : M

Python中用Ctrl+C终止多线程程序的问题解决_python

复制代码 代码如下: #!/bin/env python # -*- coding: utf-8 -*- #filename: peartest.py  import threading, signal  is_exit = False  def doStress(i, cc):     global is_exit     idx = i     while not is_exit:         if (idx < 10000000):             print "thre

浅析Python中的多进程与多线程的使用_python

在批评Python的讨论中,常常说起Python多线程是多么的难用.还有人对 global interpreter lock(也被亲切的称为"GIL")指指点点,说它阻碍了Python的多线程程序同时运行.因此,如果你是从其他语言(比如C++或Java)转过来的话,Python线程模块并不会像你想象的那样去运行.必须要说明的是,我们还是可以用Python写出能并发或并行的代码,并且能带来性能的显著提升,只要你能顾及到一些事情.如果你还没看过的话,我建议你看看Eqbal Quran的文章

Python 爬虫学习笔记之多线程爬虫_python

XPath 的安装以及使用 1 . XPath 的介绍 刚学过正则表达式,用的正顺手,现在就把正则表达式替换掉,使用 XPath,有人表示这太坑爹了,早知道刚上来就学习 XPath 多省事 啊.其实我个人认为学习一下正则表达式是大有益处的,之所以换成 XPath ,我个人认为是因为它定位更准确,使用更加便捷.可能有的人对 XPath 和正则表达式的区别不太清楚,举个例子来说吧,用正则表达式提取我们的内容,就好比说一个人想去天安门,地址的描述是左边有一个圆形建筑,右边是一个方形建筑,你去找吧,而使

Python中使用Tkinter模块创建GUI程序实例_python

使用Tkinter模块来创建简单的GUI程序. Tkinter的Widgets有:Button.Canvas.Checkbutton.Entry.Frame.Label.Listbox.Menu.Menubutton.Message.Radiobutton.Scales.Scrollbar.TEXT.Toplevel等. 例: 复制代码 代码如下: # This program displays an empty window. import Tkinter def main():   main

可爱的Python:Python之优雅与瑕疵,第1部分

在本文中,我要讨论在最近几个 Python 版本中增加的不那么引人注目的特性, 我将分析哪些改进具有真正的价值,哪些特性只是不必要地增加了复杂性.我希望向所有并非一直使用 Python 的程序员指出真正具有价值的东西.这包括使用其他语言的程序员以及只将编程当做副业的科学家.当遇到一些难题时,我会提供解决方案. 不可比较的麻烦 在 Python 2.0 和 Python 2.1 之间,发生了一些奇怪的变化.以前可以比较的对象在进行比较时却引发了异常.具体地说,复数无法与其他数字进行比较了,包括其他