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)

下面放出完整代码,以多线程计数为例:

  1. #coding:utf-8
  2. from Tkinter import *
  3. from ScrolledText import ScrolledText #文本滚动条
  4. import threading
  5. import time
  6. from PIL import ImageTk,Image
  7. def count(i):
  8. for k in range(1, 100+1):
  9. text.insert(END,'第'+str(i)+'线程count:  '+str(k)+'\n')
  10. time.sleep(0.001)
  11. def fun():
  12. for i in range(1, 5+1):
  13. th=threading.Thread(target=count,args=(i,))
  14. th.setDaemon(True)#守护线程
  15. th.start()
  16. var.set('MDZZ')
  17. root=Tk()
  18. root.title('九日王朝')  #窗口标题
  19. root.geometry('+600+100')#窗口呈现位置
  20. image2 =Image.open(r'ParticleSmoke.png')
  21. background_image = ImageTk.PhotoImage(image2)
  22. textlabel=Label(root,image=background_image)
  23. textlabel.grid()
  24. text=ScrolledText(root,font=('微软雅黑',10),fg='blue')
  25. text.grid()
  26. button=Button(root,text='屠龙宝刀 点击就送',font=('微软雅黑',10),command=fun)
  27. button.grid()
  28. var=StringVar()#设置变量
  29. label=Label(root,font=('微软雅黑',10),fg='red',textvariable=var)
  30. label.grid()
  31. var.set('我不断的洗澡,油腻的师姐在哪里')
  32. root.mainloop()

最后说一下,多线程无限调用ScrolledText.insert()插入文本时,可能会造成程序卡顿甚至奔溃

如果用sleep控制一下的话会好一些,不知道这里有没有更好的处理办法

python——Tkinter图形化界面及threading多线程的更多相关文章

  1. Python的图形化界面

    导入easygui模块有很多种方法 , 这里只介绍一种简单使用的 . import easygui as g 将easygui 简称为g 然后开始调用她的函数就行. import easygui as ...

  2. PySide——Python图形化界面

    PySide——Python图形化界面 PySide——Python图形化界面入门教程(四) PySide——Python图形化界面入门教程(四) ——创建自己的信号槽 ——Creating Your ...

  3. PySide——Python图形化界面入门教程(四)

    PySide——Python图形化界面入门教程(四) ——创建自己的信号槽 ——Creating Your Own Signals and Slots 翻译自:http://pythoncentral ...

  4. PySide——Python图形化界面入门教程(六)

    PySide——Python图形化界面入门教程(六) ——QListView和QStandardItemModel 翻译自:http://pythoncentral.io/pyside-pyqt-tu ...

  5. PySide——Python图形化界面入门教程(五)

    PySide——Python图形化界面入门教程(五) ——QListWidget 翻译自:http://pythoncentral.io/pyside-pyqt-tutorial-the-qlistw ...

  6. PySide——Python图形化界面入门教程(三)

    PySide——Python图形化界面入门教程(三) ——使用内建新号和槽 ——Using Built-In Signals and Slots 上一个教程中,我们学习了如何创建和建立交互widget ...

  7. PySide——Python图形化界面入门教程(二)

    PySide——Python图形化界面入门教程(二) ——交互Widget和布局容器 ——Interactive Widgets and Layout Containers 翻译自:http://py ...

  8. PySide——Python图形化界面入门教程(一)

    PySide——Python图形化界面入门教程(一) ——基本部件和HelloWorld 翻译自:http://pythoncentral.io/intro-to-pysidepyqt-basic-w ...

  9. python+pycharm+PyQt5 图形化界面安装教程

    python图形化界面安装教程 配置环境变量 主目录 pip所在目录,及script目录 更新pip(可选) python -m pip install --upgrade pip ps:更新出错一般 ...

随机推荐

  1. centos7下编译安装python3.7,且与python2.7.5共存

    环境:Centos7.6 x64 一.安装python3.7 下载python源码包: wget https://www.python.org/ftp/python/3.7.4/Python-3.7. ...

  2. JS基础语法---冒泡顺序

    冒泡排序: 把所有的数据按照一定的顺序进行排列(从小到大,从大到小) 1. 画图帮助理解如下: 2. 从小到大排序: var arr = [10, 0, 100, 20, 60, 30]; //循环1 ...

  3. ADB常用命令(adb常用命令)

    基本用法 命令语法 adb 命令的基本语法如下: adb [-d|-e|-s <serialNumber>] <command> 如果只有一个设备/模拟器连接时,可以省略掉 [ ...

  4. RunLoop的知识小记

    RunLoop字面上的意思是,运行循环: 其基本作用:保持程序的持续运行: 处理App中的各种事件(比如:触摸事件.定时器事件.Selector事件) 节省CPU资源,提高程序性能:该做事时做事,该休 ...

  5. python 中文分词库 jieba库

    jieba库概述: jieba是优秀的中文分词第三方库 中文文本需要通过分词获得单个的词语 jieba是优秀的中文分词第三方库,需要额外安装 jieba库分为精确模式.全模式.搜索引擎模式 原理 1. ...

  6. Mysql Join-连接查询(中)

    Mysql Join-连接查询(中) 认识 就我平时的数据接触来看, 连接查询也没有很复杂,不够是非常需要耐心和逻辑的, 一点点将数据查出来, 拼接等. 没有什么技巧, 多练习就会了. 无非就是表之间 ...

  7. LInkHashMap源码分析

    说LinkHashMap之前,我们先来谈谈什么是LRU算法? 按照英文的直接原义就是Least Recently Used,最近最久未使用法,它是按照一个非常注明的计算机操作系统基础理论得来的:最近使 ...

  8. softmax求导、cross-entropy求导及label smoothing

    softmax求导 softmax层的输出为 其中,表示第L层第j个神经元的输入,表示第L层第j个神经元的输出,e表示自然常数. 现在求对的导数, 如果j=i,   1 如果ji, 2 cross-e ...

  9. (三)Amazon Lightsail 部署LAMP应用程序之连接到Lightsail数据库

    连接到Lightsail数据库 简介:应用程序的Web前端的第一次迭代不建议固有的可伸缩性,因为数据库和前端位于同一台机器,只需要额外的前端容量,添加额外的数据库实例就会出现问题,若想解决此问题,需要 ...

  10. 22.Java基础_StringBuilder类

    String类对象的拼接操作:执行到s+="world"语句时,常量池会先创建"world"对象,再去创建"helloworld"对象,最后 ...