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

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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 201,681评论 5 474
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 84,710评论 2 377
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 148,623评论 0 334
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,202评论 1 272
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,232评论 5 363
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,368评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,795评论 3 393
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,461评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,647评论 1 295
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,476评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,525评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,226评论 3 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,785评论 3 303
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,857评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,090评论 1 258
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,647评论 2 348
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,215评论 2 341

推荐阅读更多精彩内容

  • # Python 资源大全中文版 我想很多程序员应该记得 GitHub 上有一个 Awesome - XXX 系列...
    小迈克阅读 2,949评论 1 3
  • 常用库: fuzzywuzzy,字符串模糊匹配。 esmre,正则表达式的加速器。 Chardet字符编码探测器,...
    AlastairYuan阅读 2,264评论 0 43
  • 前言 Python的创始人为Guido van Rossum。1989年圣诞节期间,在阿姆斯特丹,Guido为了打...
    依依玖玥阅读 3,561评论 6 37
  • python 也是很值得学习的一门工具。学好python和R。 1环境管理 管理 Python 版本和环境的工具 ...
    Liam_ml阅读 4,790评论 1 51
  • 夏日炎炎,燥热的天气是艳阳的矫情。空调下的阴凉,总是逃不开这这一抹的矫情。像是一缕慢性炎症,悄悄的随凉风渗透到心底...
    零兰阅读 808评论 2 1