pythonGUI教程(一)

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 后记

我目前就用到了这点东西,所以我也就写了这部分,其他的部分没有提及,如果我后期要用的话会补写在这里。

你可能感兴趣的:(pythonGUI教程(一))