作为Python中GUI开发的新手(使用pygtk),我刚刚开始学习线程。为了测试我的技能,我用启动/停止按钮编写了一个简单的GTK界面。目标是,当它被点击时,一个线程开始快速地在文本框中增加一个数字,同时保持图形用户界面的响应。

我让GUI工作得很好,但是线程有问题。这可能是一个简单的问题,但我的思想是油炸一天。下面我先粘贴了来自Python解释器的引用通告,然后是代码。你可以去

http://drop.io/pxgr5id

下载。我正在使用BZR进行修订控制,因此如果您想进行修改并重新删除它,请提交更改。我也在粘贴代码

http://dpaste.com/113388/

因为它可以有行号,而这个降价的东西让我头疼。

回溯

crashsystems@crashsystems-laptop:~/Desktop/thread-gui$ python threadgui.pybtnStartStop clicked

Traceback (most recent call last):

File "threadgui.py", line 39, in on_btnStartStop_clicked

self.thread.stop()

File "threadgui.py", line 20, in stop

self.join()

File "/usr/lib/python2.5/threading.py", line 583, in join

raise RuntimeError("cannot join thread before it is started")

RuntimeError: cannot join thread before it is started

btnStartStop clicked

threadStop = 1

btnStartStop clicked

threadStop = 0

btnStartStop clicked

Traceback (most recent call last):

File "threadgui.py", line 36, in on_btnStartStop_clicked

self.thread.start()

File "/usr/lib/python2.5/threading.py", line 434, in start

raise RuntimeError("thread already started")

RuntimeError: thread already started

btnExit clicked

exit() called

代码

#!/usr/bin/bash

import gtk, threading

class ThreadLooper (threading.Thread):

def __init__ (self, sleep_interval, function, args=[], kwargs={}):

threading.Thread.__init__(self)

self.sleep_interval = sleep_interval

self.function = function

self.args = args

self.kwargs = kwargs

self.finished = threading.Event()

def stop (self):

self.finished.set()

self.join()

def run (self):

while not self.finished.isSet():

self.finished.wait(self.sleep_interval)

self.function(*self.args, **self.kwargs)

class ThreadGUI:

# Define signals

def on_btnStartStop_clicked(self, widget, data=None):

print "btnStartStop clicked"

if(self.threadStop == 0):

self.threadStop = 1

self.thread.start()

else:

self.threadStop = 0

self.thread.stop()

print "threadStop = " + str(self.threadStop)

def on_btnMessageBox_clicked(self, widget, data=None):

print "btnMessageBox clicked"

self.lblMessage.set_text("This is a message!")

self.msgBox.show()

def on_btnExit_clicked(self, widget, data=None):

print "btnExit clicked"

self.exit()

def on_btnOk_clicked(self, widget, data=None):

print "btnOk clicked"

self.msgBox.hide()

def on_mainWindow_destroy(self, widget, data=None):

print "mainWindow destroyed!"

self.exit()

def exit(self):

print "exit() called"

self.threadStop = 1

gtk.main_quit()

def threadLoop(self):

# This will run in a thread

self.txtThreadView.set_text(str(self.threadCount))

print "hello world"

self.threadCount += 1

def __init__(self):

# Connect to the xml GUI file

builder = gtk.Builder()

builder.add_from_file("threadgui.xml")

# Connect to GUI widgets

self.mainWindow = builder.get_object("mainWindow")

self.txtThreadView = builder.get_object("txtThreadView")

self.btnStartStop = builder.get_object("btnStartStop")

self.msgBox = builder.get_object("msgBox")

self.btnMessageBox = builder.get_object("btnMessageBox")

self.btnExit = builder.get_object("btnExit")

self.lblMessage = builder.get_object("lblMessage")

self.btnOk = builder.get_object("btnOk")

# Connect the signals

builder.connect_signals(self)

# This global will be used for signaling the thread to stop.

self.threadStop = 1

# The thread

self.thread = ThreadLooper(0.1, self.threadLoop, (1,0,-1))

self.threadCounter = 0

if __name__ == "__main__":

# Start GUI instance

GUI = ThreadGUI()

GUI.mainWindow.show()

gtk.main()

python looper_入门级python线程问题相关推荐

  1. Python爬虫入门级(二)

    Python爬虫入门级 Python爬虫(二) 获取商品关键信息 遍历获取每一页数据 写入到磁盘中 Python爬虫(二) 从京东商城爬取数据,写入到本地的text文件中 获取商品关键信息 获取商品评 ...

  2. python之进程和线程的对比

    python之进程和线程的对比 1. 进程和线程的对比的三个方向 关系对比 区别对比 优缺点对比 2. 关系对比 线程是依附在进程里面的,没有进程就没有线程. 一个进程默认提供一条线程,进程可以创建多 ...

  3. 分享:python,限制任意函数,线程的执行时间或根据条件终止.

    python,限制任意函数,线程的执行时间或根据条件终止. http://my.oschina.net/u/1024140/blog/122778

  4. 我自学python的路-Python 学习路线(非常适合小白的入门级教程)

    Python python 是什么 python 教程 python3 python 下载 python 安装 python 核心编程 Python 学习路线 前言 我们在学习一门编程语言,最开始拥有 ...

  5. 《转载》Python并发编程之线程池/进程池--concurrent.futures模块

    本文转载自 Python并发编程之线程池/进程池--concurrent.futures模块 一.关于concurrent.futures模块 Python标准库为我们提供了threading和mul ...

  6. python网络编程基础(线程与进程、并行与并发、同步与异步、阻塞与非阻塞、CPU密集型与IO密集型)...

    python网络编程基础(线程与进程.并行与并发.同步与异步.阻塞与非阻塞.CPU密集型与IO密集型) 目录 线程与进程并行与并发同步与异步阻塞与非阻塞CPU密集型与IO密集型 线程与进程 进程 前言 ...

  7. Python学习笔记:线程和进程(合),分布式进程

    前言 最近在学习深度学习,已经跑出了几个模型,但Pyhton的基础不够扎实,因此,开始补习Python了,大家都推荐廖雪峰的课程,因此,开始了学习,但光学有没有用,还要和大家讨论一下,因此,写下这些帖 ...

  8. python多线程编程(2): 线程的创建、启动、挂起和退出

    From: http://www.cnblogs.com/holbrook/archive/2012/03/02/2376940.html 如上一节,python的threading.Thread类有 ...

  9. Python 进程 Process 与线程 threading 区别 - Python零基础入门教程

    目录 一.Python 线程 threading 创建 二.Python 进程 Process 创建 三.Python 进程 Process 和线程 threading 区别 四.Python 进程 ...

最新文章

  1. python主要是干什么用的-Python到底可以干什么?主要应用领域
  2. 我的世界java1.15.2光影_快去打卡吧!海南首个“360光影馆”落户三亚
  3. C# 8 新特性 - 只读struct成员
  4. tars框架php,TarsPHP: TARS-PHP是针对php使用tars二进制协议,以及tars平台整体运维、RPC等一系列能力的解决方案...
  5. 物体非等比缩放后的法线处理
  6. Spark 2.2 Core :TimSort 的原理与源码分析
  7. Java程序性能优化技巧
  8. Visual Studio 2015离线版msdn下载和安装
  9. Unity官网地址变更为https://unity.cn/
  10. 嵌入式编程 while(1)的妙用!
  11. unl导入导出数据库
  12. 赴微软测试工程师必考一道笔试题目
  13. 什么是自底向上/自上而下的显著性目标检测?
  14. 惊闻苏州GDP总量突破2万亿大关!
  15. 程序员电脑必备软件整理(持续更新)
  16. 南京软件测试自学英语,南京软件测试培训班怎么样?南京软件测试培训班学什么?...
  17. 百余大佬署名AI论文被爆抄袭!智源现已致歉
  18. Python爬取游戏英雄皮肤图片 王者+LOL
  19. Hexo 魔改主题 butterfly
  20. Echarts图表legend过多被遮挡

热门文章

  1. 为什么BCH有了0确认还要缩短时间
  2. 阿里云应用性能管理(APM)产品-应用实时监控服务(ARMS)技术解密 资料下载...
  3. Linux 防火墙开放特定端口 (iptables)
  4. [转]Hadoop家族学习路线图
  5. 《分布式系统:概念与设计》一1.6 实例研究:万维网
  6. Android 应用审核乱象:诈骗软件冲上排行榜首
  7. Linux内核NAPI机制分析
  8. paip.http 404错误 的解决
  9. nsTimer的简单用法
  10. Flutter持久化存储之文件存储