0 .前言
最近要忙毕设了,毕设要用到到python,所以不如借着这个机会写写自己在用python的一些功能吧,本文虽然顶着教程的名字,但其实更多的像是我自己的技术备忘吧,但愿毕业答辩的时候还能看懂自己写的代码。本文极度不负责任,不可能介绍所有的用法,只有我用到的功能有所介绍,其他的为象征性提及,所以,你懂的~自己学去。
1 .GUI设计
python常见的几个可以用于GUI设计的库函数:
curses : 用于创建终端GUI应用程序的ncurses的内置包装器.
enaml : 使用声明式语法(如QML)创建漂亮的用户界面.
Flexx : Flexx是一个纯Python工具包,用于创建GUI,它使用Web技术进行渲染.
kivy : 用于创建在Windows,Linux,Mac OS ,Android和iOS上运行的NUI应用程序的库.
pyglet : 一个用于Python的跨平台窗口和多媒体库.
PyGObject : 用于GLib / GObject / GIO / GTK +(GTK + 3)的Python绑定
PyQt : 用于Qt跨平台应用程序和UI框架的Python绑定,支持Qt v4和Qt v5框架.
PySide : 用于Qt跨平台应用程序和UI框架的Python绑定,支持Qt v4框架.
pywebview : 围绕Webview组件的轻量级跨平台本机包装,允许在自己的本机专用窗口中显示HTML内容
Tkinter : Tkinter是Python的事实上的标准GUI包.
Toga : 一个Python本机的OS本机GUI工具包.
urwid : 用于创建终端GUI应用程序的库,具有对窗口小部件、事件、丰富颜色等的强大支持.
wxPython : wxWidgets C ++类库与Python的混合.
1.1 tkinter库的使用
本文主要讲解tkinter库的使用,本文使用的环境为python3.7,与python2.x的语法有区别,请注意区分。
tkinter是python内置的标准GUI库,也是最为常用和简单的一个GUI设计库。
#!/usr/bin/env python
import tkinter as tk
class Application(tk.Frame):
def __init__(self, master=None):
tk.Frame.__init__(self, master)
self.grid()
self.createWidgets()
def createWidgets(self):
self.quitButton = tk.Button(self, text='Quit',
command=self.quit)
self.quitButton.grid()
app = Application()
app.master.title('Sample application')
app.mainloop()
这是官方的示例,旨在创建一个只包含退出按钮的窗体程序。
(采用面向对象编程方法)。因为我不会面向对象,本文只讲解面向过程如何使用。
其中导入库从import Tkinter
变为import tkinter
是由于python语法变化导致,请使用python2.x的同学注意。
面向过程编码时,一个最简单的窗口程序:
实例
#!/usr/bin/python
# -*- coding: UTF-8 -*-
import tkinter as tk
window = tk.Tk()
window.title('软件名')
window.geometry('720x480') #分辨率
window.mainloop()
其中#!/usr/bin/python
是为保证本代码可以在linux
中也可以正常运行。# -*- coding: UTF-8 -*-
保证代码的编写格式为uft-8
编码格式,不会应为格式问题导致程序无法运行。
import tkinter as tk
:导入tkinter库,并且用tk代指tkinter
window = tk.Tk()
:初始化窗口程序
window.mainloop()
:进入消息循环
tkinter
库包括15种的基本部件,包括
部件 | 描述 | 用途 | |
---|---|---|---|
Button | 按钮控件 | 在程序中显示按钮 | |
Canvas | 画布控件 | 显示图形元素如线条或文本 | |
Checkbutton | 多选框控件 | 用于在程序中提供多项选择框 | |
Entry | 输入控件 | 用于显示简单的文本内容 | |
Frame | 框架控件 | 在屏幕上显示一个矩形区域,多用来作为容器 | |
Label | 标签控件 | 可以显示文本和位图 | |
Listbox | 列表框控件 | 在Listbox窗口小部件是用来显示一个字符串列表给用户 | |
Menubutton | 菜单按钮控件 | 由于显示菜单项 | |
Menu | 菜单控件 | 显示菜单栏,下拉菜单和弹出菜单 | |
Message | 消息控件 | 用来显示多行文本,与label比较类似 | |
Radiobutton | 单选按钮控件 | 显示一个单选的按钮状态 | |
Scale | 范围控件 | 显示一个数值刻度,为输出限定范围的数字区间 | |
Scrollbar | 滚动条控件 | 当内容超过可视化区域时使用,如列表框 | . |
Text | 文本控件 | 用于显示多行文本 | |
Toplevel | 容器控件 | 用来提供一个单独的对话框,和Frame比较类似 | |
Spinbox输入控件 | 与Entry类似,但是可以指定输入范围值 | ||
PanedWindow | PanedWindow是一个窗口布局管理的插件,可以包含一个或者多个子控件 | ||
LabelFrame | labelframe 是一个简单的容器控件,常用与复杂的窗口布局 | ||
tkMessageBox | 用于显示你应用程序的消息框 |
1.1.2 button的使用
button是按钮控件,用于给图形程序添加按钮。
以制作一个寻找文件的GUI为例说明:
import tkinter as tk
import os#导入文件库,便于后期读写文件
from tkinter import*
from tkinter import filedialog#导入文件查询库
def search():#定义search函数
file_path = filedialog.askopenfilename()
print(file_path)#输出文件路径
window = tk.Tk()
file_search = tk.Button(window,text = '查找文件',bg = "white",command = search,relief = GROOVE)
window.mainloop()
对于button的语法规则:
变量 = tk.Button(继承的窗口,属性 = 参数)
参数包括:
属性 | 功能 |
---|---|
activebackground | 当鼠标放上去时,按钮的背景色 |
activeforeground | 当鼠标放上去时,按钮的前景色 |
bd | 按钮边框的大小,默认为 2 个像素 |
bg | 按钮的背景色 |
command | 按钮关联的函数,当按钮被点击时,执行该函数 |
fg | 按钮的前景色(按钮文本的颜色) |
font | 文本字体 |
height | 按钮的高度 |
highlightcolor | 要高亮的颜色 |
image | 按钮上要显示的图片 |
justify | 显示多行文本的时候,设置不同行之间的对齐方式,可选项包括LEFT, RIGHT, CENTER |
padx | 按钮在x轴方向上的内边距(padding),是指按钮的内容与按钮边缘的距离 |
pady | 按钮在y轴方向上的内边距(padding) |
relief | 边框样式,设置控件3D效果,可选的有:FLAT、SUNKEN、RAISED、GROOVE、RIDGE。默认为 FLAT |
state | 设置按钮组件状态,可选的有NORMAL、ACTIVE、 DISABLED,默认 NORMAL |
underline | 下划线,默认按钮上的文本都不带下划线。取值就是带下划线的字符串索引,为 0 时,第一个字符带下划线,为 1 时,前两个字符带下划线,以此类推 |
width | 按钮的宽度,如未设置此项,其大小以适应按钮的内容(文本或图片的大小) |
wraplength | 限制按钮每行显示的字符的数量 |
text | 按钮的文本内容 |
anchor | 锚选项,控制文本的位置,默认为中心 |
查找文件只需要使用库里自带的函数就可以做到变量名 = filedialog.askopenfilename()
,非常的easy~
1.1.3 cavans的使用
以插入图片文件为例:
#!/usr/bin/python
# -*- coding: UTF-8 -*-
import tkinter as tk
window = tk.Tk()
canvas = tk.Canvas()
w = Canvas(window,width = 500, height = 500, bg = "white")
filename = PhotoImage(file = "BIT.gif")
image = w.create_image(0,0,anchor = "nw" ,image = filename)
w.pack()
window.mainloop()
语法规则:w = tk.Canvas(继承的窗口, 属性 = 参数)
属性 | 功能 |
---|---|
bd | 边框宽度,单位像素,默认为 2 像素 |
bg | 背景色 |
confine | 如果为true(默认),画布不能滚动到可滑动的区域外 |
cursor | 光标的形状设定,如arrow, circle, cross, plus 等 |
height | 高度 |
highlightcolor | 要高亮的颜色 |
relief | 边框样式,可选值为FLAT、SUNKEN、RAISED、GROOVE、RIDGE,默认为 FLAT |
scrollregion | 一个元组 tuple (w, n, e, s),定义了画布可滚动的最大区域,w 为左边,n 为头部,e 为右边,s 为底部 |
width | 画布在 X 坐标轴上的大小 |
xscrollincrement | 用于滚动请求水平滚动的数量值 |
xscrollcommand | 水平滚动条,如果画布是可滚动的,则该属性是水平滚动条的 .set()方法 |
yscrollincrement | 类似 xscrollincrement, 但是垂直方向 |
yscrollcommand | 垂直滚动条,如果画布是可滚动的,则该属性是垂直滚动条的.set()方法 |
如果要插入图片,语法:
id = C.create_image(x, y, option, ...)
属性 | 功能 |
---|---|
anchor | 默认值是anchor=tk.CENTER,意味着图像以(x,y)位置为中心。有关此选项的可能值,请参见第5.5节“锚点”。例如,如果指定anchor=tk.S,则将定位图像,使点(x,y)位于图像底部(南)边缘的中心 |
disabledimage | 项目处于非活动状态时显示的图像 |
image | 要显示的图像 |
state | 图像对象是创建的tk.NORMAL,对鼠标可以存在响应。将此值设置tk.DISABLED为使其变灰并且对鼠标无响应。如果将其设置为 tk.HIDDEN,则该项目不可见 |
tags | 如果是单个字符串,则使用该字符串标记图像。使用字符串元组用多个标签标记图像 |
可插入的图片格式为GIF,其他格式请转换为此格式,其他格式会报错
2.1 后记
我目前就用到了这点东西,所以我也就写了这部分,其他的部分没有提及,如果我后期要用的话会补写在这里。