组件
★Raspberry Pi 3主板*1
★树莓派电源*1
★40P软排线*1
★L298N扩展板模块*1
★智能小车底板模块*1
★减速电机和车轮*4
★面包板*1
★跳线若干
实验原理
(一)常见的图形开发界面的库
Python 提供了多个图形开发界面的库,几个常用 Python GUI 库如下:
Tkinter:Tkinter 模块(Tk 接口)是 Python 的标准 Tk GUI 工具包的接口 .Tk 和 Tkinter 可以在大多数的 Unix 平台下使用,同样可以应用在 Windows 和 Macintosh 系统里。Tk8.0 的后续版本可以实现本地窗口风格,并良好地运行在绝大多数平台中。
wxPython:wxPython 是一款开源软件,是 Python 语言的一套优秀的 GUI 图形库,允许 Python 程序员很方便的创建完整的、功能健全的 GUI 用户界面。
PyQt:PyQt 是 Python 编程语言和 Qt 库的成功融合。Qt 本身是一个扩展的 C++ GUI 应用开发框架,Qt 可以在 UNIX、Windows 和 Mac OS X 上完美运行,因此 PyQt 是建立在 Qt 基础上的 Python 包装。所以 PyQt 也能跨平台使用。
(二)tk初始
注意:Python3.x 版本使用的库名为 tkinter,即首写字母 T 为小写。
import tkinter
创建一个GUI程序
1、导入 Tkinter 模块
2、创建控件
3、指定这个控件的 master, 即这个控件属于哪一个
4、告诉 GM(geometry manager) 有一个控件产生了。
实例(Python3.x):
#!/usr/bin/python3 import tkinter top = tkinter.Tk() # 进入消息循环 top.mainloop()
实例(Python2.x):
#!/usr/bin/python # -*- coding: UTF-8 -*- import Tkinter top = Tkinter.Tk() # 进入消息循环 top.mainloop()
以上代码执行结果如下图:
(三)创建基本窗口
#创建基本窗口 import tkinter as tk # 将tkinter导入到工程中 window = tk.Tk() # 创建窗体对象 window.title('musicplay') # 设置窗口标题 window.geometry('380x390') # 设置窗口大小,注意这里的x是英文字母x #如果需要规定窗体打开的位置,可以在在380x390后面加上“+10+10”, # 即横坐标为10,纵坐标为10 的位置 window.resizable(0,0) # 如果不想人为修改窗体的大小,可以加上这个 #window.iconbitmap('./logo.ico') # 设置窗体图标 #window.withdraw() # 隐藏窗口 #window.deiconify() # 显示窗口 window.mainloop() # 调用mainloop方法,使窗体一直执行下去
以上代码执行结果如下图:
那么在tkinter中又有哪些控件可以供我们使用呢?
本实验中只需要学会3种控件:标签控件来显示文字,按钮控件来控制方向,范围控件来控制油门。有点编程基础的同学几个小时就可以学会!
(四)Label标签的使用
#设置标签的大小和字体 import tkinter as tk window = tk.Tk() window.title('Label的使用') window.geometry('400x400') label = tk.Label(window,text='我是一个标签', #text为显示的文本内容 bg='black',fg='white', #bg为背景色,fg为前景色 font=("华文行楷", 20), #设置字体为“华文行楷”,大小为20 width=20,height=3) #width为标签的宽,height为高 label.pack() window.mainloop()
以上代码执行结果如下图:
#标签里插入图片,后面我们会用到按钮里插入图片 import tkinter as tk window = tk.Tk() window.title('Label的使用') window.geometry('400x400') photo = tk.PhotoImage(file='./up.png') #将图片加载到窗口中 #注意加载进来的图片只支持‘.gif’格式的图片,如果是其他格式的文件可以用其他工具转换一下,如PS、画图等 label2 = tk.Label(window,text='我是文字', image=photo, compound='center') #compound参数是指图片和文字之间的关系 label.pack() ''' anchor可用的值: left:图像居左 right:图像居右 top:图像居上 bottom:图像居下 center:文字覆盖在图像上 ''' window.mainloop()
以上代码执行结果如下图:
(五)Button按键的使用
#创建一个按钮 #我们先创建一个宽20,长2,显示文字为‘单击’的按钮练练手 import tkinter as tk window = tk.Tk() window.title("button") window.geometry("300x180") tk.Button(window,width=20,height=2,text='单击').pack() #如果后面我们需要对这个空间的属性进行修改,或者进行信息的获取,我们可以不指定对象,按键功能我们可以通过command参数实现 window.mainloop()
以上代码执行结果如下图:
#为按键添加一个回调函数 #现在我们已经将按钮创建出来了,那么当按钮按下去之后我们需要做些什么呢?这就需要设置command属性,添加回调函数了 import tkinter as tk window = tk.Tk() window.title("button") window.geometry("300x180") def danji(): #这个就是我们写的一个方法,下面由按钮进行调用 print('hello') #当按键按下时,打印‘hello’ tk.Button(window,width=20,height=2,text='单击',command=danji).pack() #注意,在设置command属性的时候,回调函数是不加'()'的,我们一般调用方法是需要,但这里就是设置属性,不需要添加 window.mainloop()
以上代码执行结果如下图:
#在按键中放置图片 #有些时候我们需要将界面做的更漂亮一点,我们可以像label一样,用图片来美化我们的按钮 import tkinter as tk window = tk.Tk() photo = tk.PhotoImage(file='./up.png') tk.Button(window, text='botton', compound='bottom', image=photo).pack() tk.Button(window, text='top', compound='top', bitmap='error').pack() #设置的相关属性和Label类似,故这里就不做赘述了 window.mainloop()
#在按键中放置图片
#有些时候我们需要将界面做的更漂亮一点,我们可以像label一样,用图片来美化我们的按钮
import tkinter as tk
window = tk.Tk()
photo = tk.PhotoImage(file='./up.png')
tk.Button(window, text='botton', compound='bottom', image=photo).pack()
tk.Button(window, text='top', compound='top', bitmap='error').pack()
#设置的相关属性和Label类似,故这里就不做赘述了
window.mainloop()
以上代码执行结果如下图:
(六)Scale滑动条的使用
#比如Windows下的音量控制,音乐或者视频的进度控制, #都是用滑动条来实现的,本实验中用来控制油门 from tkinter import * window = Tk() Scale(window,label='accelerator', #设置显示的标签 from_=0,to=100, # 设置最大最小值 #注意设置最大值的属性不是'from',而是'from_',这是因为python中已经有了from关键字啦 resolution=1, # 设置步距值 orient=HORIZONTAL, # 设置水平方向 #如果我们想设置成垂直方向改怎么办呢?直接缺省这个属性就可以啦,默认就是垂直哒 ).pack() window.mainloop()
以上代码执行结果如下图:
#绑定Scale的值为我们所用 from tkinter import * window = Tk() value = StringVar() def s_print(text): #注意,Scale的回调函数需要给定形参,当触发时会将Scale的值传给函数 print(value.get()) print(text) #两者同样的效果 Scale(window,label='accelerator', from_=0,to=100, resolution=1,show=0, variable=value,command=s_print ).pack() window.mainloop()
以上代码执行结果如下图:
(七)控件的定位
通过前面的文档我们已经知道Tkinter控件的简单使用,想要拥有一个简洁、合理的界面,控件布局就显得尤为重要了,而Tkinter提供了三种布局方式给我们。
1.pack是一种相对布局方式,指定控件的相对位置,精确位置会由系统完成。
pack布局没有任何属性参数,默认会自上而下垂直并且水平居中排列。我们可以通过side=TOP/BOTTOM/LEFT/RIGHT,控制控件的相对位置(上下左右),利用fill=x来是控件和窗体一样宽,用padx、pady、ipadx、ipady控制控件的边距......