1.概述

Python支持多种图形界面的第三方库,包括:

Tk

wxWidgets

Qt

GTK

等等。

但是Python自带的库是支持Tk的Tkinter,使用Tkinter,无需安装任何包,就可以直接使用。本章简单介绍如何使用Tkinter进行GUI编程。

Tkinter

我们来梳理一下概念:

我们编写的Python代码会调用内置的Tkinter,Tkinter封装了访问Tk的接口;

Tk是一个图形库,支持多个操作系统,使用Tcl语言开发;

Tk会调用操作系统提供的本地GUI接口,完成最终的GUI。

所以,我们的代码只需要调用Tkinter提供的接口就可以了。

第一个GUI程序

使用Tkinter十分简单,我们来编写一个GUI版本的“Hello, world!”。

第一步是导入Tkinter包的所有内容:

from tkinter import *

第二步是从Frame派生一个Application类,这是所有Widget的父容器:

class Application(Frame):

def __init__(self, master=None):

Frame.__init__(self, master)

self.pack()

self.createWidgets()

def createWidgets(self):

self.helloLabel = Label(self, text='Hello, world!')

self.helloLabel.pack()

self.quitButton = Button(self, text='Quit', command=self.quit)

self.quitButton.pack()

在GUI中,每个Button、Label、输入框等,都是一个Widget。Frame则是可以容纳其他Widget的Widget,所有的Widget组合起来就是一棵树。

pack()方法把Widget加入到父容器中,并实现布局。pack()是最简单的布局,grid()可以实现更复杂的布局。

在createWidgets()方法中,我们创建一个Label和一个Button,当Button被点击时,触发self.quit()使程序退出。

第三步,实例化Application,并启动消息循环:

app = Application()

# 设置窗口标题:

app.master.title('Hello World')

# 主消息循环:

app.mainloop()

GUI程序的主线程负责监听来自操作系统的消息,并依次处理每一条消息。因此,如果消息处理非常耗时,就需要在新线程中处理。

运行这个GUI程序,可以看到下面的窗口:

点击“Quit”按钮或者窗口的“x”结束程序。

输入文本

我们再对这个GUI程序改进一下,加入一个文本框,让用户可以输入文本,然后点按钮后,弹出消息对话框。

from tkinter import *

import tkinter.messagebox as messagebox

class Application(Frame):

def __init__(self, master=None):

Frame.__init__(self, master)

self.pack()

self.createWidgets()

def createWidgets(self):

self.nameInput = Entry(self)

self.nameInput.pack()

self.alertButton = Button(self, text='Hello', command=self.hello)

self.alertButton.pack()

def hello(self):

name = self.nameInput.get() or 'world'

messagebox.showinfo('Message', 'Hello, %s' % name)

app = Application()

# 设置窗口标题:

app.master.title('Hello World')

# 主消息循环:

app.mainloop()

当用户点击按钮时,触发hello(),通过self.nameInput.get()获得用户输入的文本后,使用tkMessageBox.showinfo()可以弹出消息对话框。

程序运行结果如下:

小结

Python内置的Tkinter可以满足基本的GUI程序的要求,如果是非常复杂的GUI程序,建议用操作系统原生支持的语言和库来编写。

2.海龟绘图

在1966年,Seymour Papert和Wally Feurzig发明了一种专门给儿童学习编程的语言——LOGO语言,它的特色就是通过编程指挥一个小海龟(turtle)在屏幕上绘图。

海龟绘图(Turtle Graphics)后来被移植到各种高级语言中,Python内置了turtle库,基本上100%复制了原始的Turtle Graphics的所有功能。

我们来看一个指挥小海龟绘制一个长方形的简单代码:

# 导入turtle包的所有内容:

from turtle import *

# 设置笔刷宽度:

width(4)

# 前进:

forward(200)

# 右转90度:

right(90)

# 笔刷颜色:

pencolor('red')

forward(100)

right(90)

pencolor('green')

forward(200)

right(90)

pencolor('blue')

forward(100)

right(90)

# 调用done()使得窗口等待被关闭,否则将立刻关闭窗口:

done()

在命令行运行上述代码,会自动弹出一个绘图窗口,然后绘制出一个长方形:

从程序代码可以看出,海龟绘图就是指挥海龟前进、转向,海龟移动的轨迹就是绘制的线条。要绘制一个长方形,只需要让海龟前进、右转90度,反复4次。

调用width()函数可以设置笔刷宽度,调用pencolor()函数可以设置颜色。更多操作请参考turtle库的说明。

绘图完成后,记得调用done()函数,让窗口进入消息循环,等待被关闭。否则,由于Python进程会立刻结束,将导致窗口被立刻关闭。

turtle包本身只是一个绘图库,但是配合Python代码,就可以绘制各种复杂的图形。例如,通过循环绘制5个五角星:

from turtle import *

def drawStar(x, y):

pu()

goto(x, y)

pd()

# set heading: 0

seth(0)

for i in range(5):

fd(40)

rt(144)

for x in range(0, 250, 50):

drawStar(x, 0)

done()

程序执行效果如下:

使用递归,可以绘制出非常复杂的图形。例如,下面的代码可以绘制一棵分型树:

from turtle import *

# 设置色彩模式是RGB:

colormode(255)

lt(90)

lv = 14

l = 120

s = 45

width(lv)

# 初始化RGB颜色:

r = 0

g = 0

b = 0

pencolor(r, g, b)

penup()

bk(l)

pendown()

fd(l)

def draw_tree(l, level):

global r, g, b

# save the current pen width

w = width()

# narrow the pen width

width(w * 3.0 / 4.0)

# set color:

r = r + 1

g = g + 2

b = b + 3

pencolor(r % 200, g % 200, b % 200)

l = 3.0 / 4.0 * l

lt(s)

fd(l)

if level < lv:

draw_tree(l, level + 1)

bk(l)

rt(2 * s)

fd(l)

if level < lv:

draw_tree(l, level + 1)

bk(l)

lt(s)

# restore the previous pen width

width(w)

speed("fastest")

draw_tree(l, 4)

done()

执行上述程序需要花费一定的时间,最后的效果如下:

如何给python爬虫加界面_Python爬虫技术--基础篇--图形界面相关推荐

  1. python传递参数格式_Python语言学习基础篇之Python发送Post请求之根据参数位置传参、数据类型、不同方式传参...

    本文主要介绍了Python语言学习基础篇之Python发送Post请求之根据参数位置传参.数据类型.不同方式传参,通过具体的内容向大家展现,希望对大家Python语言的学习有所帮助. 目录 一.验证 ...

  2. centos恢复图形界面_CentOS 7 启动与切换图形界面

    CentOS 7 启动与切换图形界面 今天打开了新安装的centos 7虚拟机,发现刚进去是DOS界面,原来默认情况下并不会安装图形界面,需要手动安装. 安装图形界面 1.开机root登录 2.安装X ...

  3. 0基础python入门书籍 excel_【曾贤志】从零基础开始用Python处理Excel数据 - 第1季 基础篇...

    =====[曾贤志]从零基础开始用Python处理Excel数据 第1季 基础篇====== 1-1 什么是python? .mp4 1-2 为什么要学习用Python处理Excel表格? .mp4 ...

  4. linux非图形化界面,在Linux图形界面中显示中文,非图形界面中,显示英文

    在Linux图形界面中显示中文,非图形界面中,显示英文 设置语言,应当改环境变量LANG 1. 在非Xwindow下显示英文.非Xwindow下不能显示中文汉字,如果设置成中文,则中文部分显示乱码,第 ...

  5. HFSS学习笔记(一)基础篇 操作界面简介和使用前的准备工作

    HFSS学习笔记(一)基础篇 操作界面简介和使用前的准备工作 一.HFSS工作界面简介 各区域的功能: 二.设计的步骤 1.创建工程文件 2.进行设计前的准备工作 一.HFSS工作界面简介 各区域的功 ...

  6. python爬虫可视化界面_python爬虫---垃圾分类可视化界面

    在以前我写了一个对垃圾进行分类的exe程序,功能齐全了可是外观看起来不怎么好看,所以我用python中的tkinter库写了一个对垃圾分类可视化的一个程序,而后打包成了一个exe. 1.展现界面效果 ...

  7. python爬虫面试问题_Python爬虫面试总结

    ## Python爬虫面试总结 1. 写一个邮箱地址的正则表达式? [A-Za-z0-9\u4e00-\u9fa5]+@[a-zA-Z0-9_-]+(\.[a-zA-Z0-9_-]+)+$ 2. 谈 ...

  8. python爬虫教程大全_python爬虫入门教程

    爬虫是一个是一个好玩的技术,偷偷爬取mm的照片,爬取知乎用户头像等等,这些教程经验帖在网上随便一搜,到处都是:那么今天小编将给大家简单讲讲python爬虫的入门.鉴于经验排版模式有限,所以这里只能简单 ...

  9. python爬虫好学不_Python爬虫好学吗?

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 二:开始爬虫 1.爬虫主要分为两个部分,第一个是网页界面的获取,第二个是网页界面的解析:爬虫的原理是利用代码模拟浏览器访问网站,与浏览器不同的是,爬虫获取 ...

最新文章

  1. Linux之查看目录命令
  2. http 里面的post和get区别
  3. zabbix mysql模板_zabbix模板监控mysql
  4. 关于frame的样式
  5. python 转成摩尔斯电码_一篇文章教会你摩尔斯码
  6. docker镜像启动后端口号是多少_14,Docker容器必知必会,你会了吗?
  7. java websocket修改为同步_服务端向客户端推送消息技术之websocket的介绍
  8. 使用Redis让单号从001递增
  9. 9年前的大一,我们这样为女生过37女生节【祝节日快乐】
  10. python.day05
  11. 强化学习在美团“猜你喜欢”的实践
  12. ArcGIS Engine代码共享-可以直接移植到你的工程中
  13. apipost预执行脚本中发送一个请求的方法
  14. php中统一编码语句,统一编码
  15. 力扣 13.罗马数字转整数
  16. signature=e7a4f21fa0bd38abc7e1a2451a8b7b26,进阶作业.ipynb
  17. html图片没有白边,css插入背景图片底部有白边的解决方法
  18. 晨曦记账本如何将账本内容导出EXCEL表格
  19. 这个机器人还原魔方,只需八秒!
  20. Android实现TTS文字转语音功能

热门文章

  1. javaweb——模拟用户登录和新闻发布
  2. Pencil有必要拥有吗?推荐好用的第三方电容笔
  3. K8S 生态周报| Lima 已正式加入 CNCF
  4. 三种常见的 Mac 安装 git 工具的方法
  5. 空间数据WKT与WKB格式介绍
  6. 2012.5.25微博热报——面试程序员的方法、敏捷转型
  7. Visual Studio 2019 Python 环境配置
  8. windows xp系统左下角音量图标不显示的一种解决办法
  9. calendar 字符串日期转时间戳
  10. 采集模拟信号:带宽、奈奎斯特定理和混叠