python——Tkinter图形化界面及threading多线程
来源:互联网 发布:java filedialog 编辑:程序博客网 时间:2024/05/17 01:33
Tkinter模块("Tk 接口")是Python的标准Tk GUI工具包的接口.Tk和Tkinter可以在大多数的Unix平台下使用,同样可以应用在Windows和Macintosh系统里.Tk8.0的后续版本可以实现本地窗口风格,并良好地运行在绝大多数平台中
Tkinter包含了若干模块. Tk接口被封装在一个名为 _tkinter 二进制模块里( tkinter 的早期版本). 这个模块包含了Tk的低级接口,因而它不会被程序员直接应用.它通常表现为一个共享库(或DLL文件),但在一些版本中它与Python解释器结合在一起
在Tk接口的附加模块中,Tkinter包含了一些Python模块,保存在标准库的一个子目录里,称为 tkinter。 其中有两个重要的模块,一个是Tkinter自己,另一个叫做Tkconstants:前者自动导入后者,所以你如果使用Tkinter,仅仅导入一个模块就可以
import Tkinter
或者更常用的:
from Tkinter import *
简单列出一些常见的控件
下面具体举例说明一下,样例如下图:
首先我们指定一个Tkinter对象
root=Tk()
设置标题
root.title('九日王朝')
图片的呈现方式有很多种,这里采用的是先设置一个label控件,使其图片在label中呈现
image2 =Image.open(r'ParticleSmoke.png')
background_image = ImageTk.PhotoImage(image2)
textlabel=Label(root,image=background_image)
textlabel.grid()
这里注意,grid是布局方法,也就是说我们每次设置一个控件都需要将其grid,否则将不显示
滚动文本框ScrolledText,其可以设置字体,颜色等参数
text=ScrolledText(root,font=('微软雅黑',10),fg='blue')
text.grid()
按钮
button=Button(root,text='屠龙宝刀 点击就送',font=('微软雅黑',10),command=fun)
button.grid()
以及可变的文本,文本我们采取的也是放在label里的方式
var=StringVar()#设置变量
label=Label(root,font=('微软雅黑',10),fg='red',textvariable=var)
label.grid()
var.set('我不断的洗澡,油腻的师姐在哪里')
如果在程序执行中,需要对文本进行更改时,可以再次使用var.set
最后,我们通过mainloop()进入到事件(消息)循环,也就是维护我们的窗口界面
下面介绍一下threading多线程模块
threading.Thread(target=函数名args=(调用参数,注意最后要有一个‘,’))可以实例化一个多线程对象
通过start就可以开启
这里要说一下th.setDaemon(True)守护线程
python中得thread的一些机制和C/C++不同:在C/C++中,主线程结束后,其子线程会默认被主线程kill掉。而在python中,主线程结束后,会默认等待子线程结束后,主线程才退出。
那么尴尬的问题就出现了,有一种情况,比如说在linux系统中存在脱离于终端的线程,即父进程在创建子进程之后先于子进程退出,会造成这个子进程变为“孤儿进程”
如果你忘记杀死子线程,那么好了,你杀主线程的时候其就会挂起等待直至子线程结束,所以为了避免这样的情况,python有两个函数管理线程:join和setDaemon
join:如在一个线程B中调用threada.join(),则threada结束后,线程B才会接着threada.join()往后运行。
setDaemon:主线程A启动了子线程B,调用b.setDaemaon(True),则主线程结束时,会把子线程B也杀死,与C/C++中得默认效果是一样的。
说了这么多就是大家最好养成习惯,一般情况下,在start前面加一下setDaemon(True)
下面放出完整代码,以多线程计数为例:
#coding:utf-8from Tkinter import *from ScrolledText import ScrolledText #文本滚动条import threadingimport timefrom PIL import ImageTk,Imagedef count(i): for k in range(1, 100+1): text.insert(END,'第'+str(i)+'线程count: '+str(k)+'\n') time.sleep(0.001) def fun(): for i in range(1, 5+1): th=threading.Thread(target=count,args=(i,)) th.setDaemon(True)#守护线程 th.start() var.set('MDZZ')root=Tk()root.title('九日王朝') #窗口标题root.geometry('+600+100')#窗口呈现位置image2 =Image.open(r'ParticleSmoke.png')background_image = ImageTk.PhotoImage(image2)textlabel=Label(root,image=background_image)textlabel.grid()text=ScrolledText(root,font=('微软雅黑',10),fg='blue')text.grid()button=Button(root,text='屠龙宝刀 点击就送',font=('微软雅黑',10),command=fun)button.grid()var=StringVar()#设置变量label=Label(root,font=('微软雅黑',10),fg='red',textvariable=var)label.grid()var.set('我不断的洗澡,油腻的师姐在哪里')root.mainloop()
最后说一下,多线程无限调用ScrolledText.insert()插入文本时,可能会造成程序卡顿甚至奔溃
如果用sleep控制一下的话会好一些,不知道这里有没有更好的处理办法
- python——Tkinter图形化界面及threading多线程
- python 多线程 —— threading.Threading()
- python 多线程 —— threading.Lock()
- Python初学——多线程Threading
- Python初学——多线程Threading
- Python初学——多线程Threading
- python多线程threading.Condition示例及解析
- python多线程threading及锁机制
- 用python打造中英文词频统计系统(1)--利用tkinter设计图形化界面
- Python 图形Tkinter Button
- Python Tkinter 图形用户界面
- python一个进程——多线程threading的实现
- thread/threading/Queue/mutex——Python 多线程
- python爬虫——多线程+协程(threading+gevent)
- 【python tkinter】登陆界面
- Python 多线程 Threading模块
- Python threading多线程编程
- python --- 多线程之threading
- 由 bind_mismatch 引起的 大量 version_count 问题
- Java_面向对象(1)_续
- centos7下安装Anaconda
- (十一)Shell基本命令 Linux文件系统 Linux网络配置管理
- 深入理解Java:注解(Annotation)自定义注解入门
- python——Tkinter图形化界面及threading多线程
- ubuntu 同时安装多个版本的python
- EC管理智能电池的方案
- 一致性Hash介绍及使用场景
- PHP读取doc,docx,xls,pdf,txt内容
- 函数返回值和返回引用是不同的
- “此网页上的某个 Web 部件或 Web 表单控件无法显示或导入。找不到该类型,或该类型未注册为安全类型。”
- 1.2米的百岁大龙虾 被食素妹子救了
- windows 安装搭建 Nginx