转:python实现GUI(图形用户界面)编程
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
转:python实现GUI(图形⽤户界⾯)编程
转:https:///dongfei2033/article/details/77971197/
Python⽀持多种图形界⾯的第三⽅库,包括:
wxWidgets
Qt
GTK
Tkinter: Tkinter 模块(Tk 接⼝)是 Python 的标准 Tk GUI ⼯具包的接⼝ .Tk 和 Tkinter 可以在⼤多数的 Unix 平台下使⽤,同样可以应⽤在 Windows 和 Macintosh 系统⾥。
Tk8.0 的后续版本可以实现本地窗⼝风格,并良好地运⾏在绝⼤多数平台中。
wxPython:wxPython 是⼀款开源软件,是 Python 语⾔的⼀套优秀的 GUI 图形库,允许 Python 程序员很⽅便的创建完整的、功能键全的 GUI ⽤户界⾯。
Jython:Jython 程序可以和 Java ⽆缝集成。
除了⼀些标准模块,Jython 使⽤ Java 的模块。
Jython ⼏乎拥有标准的Python 中不依赖于 C 语⾔的全部模块。
⽐如,Jython 的⽤户界⾯将使⽤ Swing,AWT或者 SWT。
Jython 可以被动态或静态地编译成 Java 字节码。
Tkinter
我们来梳理⼀下概念:
我们编写的Python代码会调⽤内置的Tkinter,Tkinter封装了访问Tk的接⼝;
Tk是⼀个图形库,⽀持多个操作系统,使⽤Tcl语⾔开发;
Tk会调⽤操作系统提供的本地GUI接⼝,完成最终的GUI。
所以,我们的代码只需要调⽤Tkinter提供的接⼝就可以了。
在GUI中,每个Button、Label、输⼊框等,都是⼀个Widget。
Frame则是可以容纳其他Widget的Widget,所有的Widget组合起来就是⼀棵树。
pack()⽅法把Widget加⼊到⽗容器中,并实现布局。
pack()是最简单的布局,grid()可以实现更复杂的布局。
Tkinter
创建⼀个GUI程序
1、导⼊ Tkinter 模块
2、创建控件
3、指定这个控件的 master,即这个控件属于哪⼀个
4、告诉 GM(geometry manager) 有⼀个控件产⽣了。
实例:
#!/usr/bin/python
# -*- coding: UTF-8 -*-
import Tkinter
top = ()
# 进⼊消息循环
top.mainloop()
组件
Tkinter的提供各种控件,如按钮,标签和⽂本框,⼀个GUI应⽤程序中使⽤。
这些控件通常被称为控件或者部件。
⽬前有15种Tkinter的部件。
我们提出这些部件以及⼀个简短的介绍,在下⾯的表:
控件描述
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⽤于显⽰你应⽤程序的消息框。
标准属性
标准属性也就是所有控件的共同属性,如⼤⼩,字体和颜⾊等等。
属性描述
Dimension控件⼤⼩;
Color控件颜⾊;
Font控件字体;
Anchor锚点;
Relief控件样式;
Bitmap位图;
Cursor光标;
⼏何管理
Tkinter控件有特定的⼏何状态管理⽅法,管理整个控件区域组织,⼀下是Tkinter公开的⼏何管理类:包、⽹格、位置
⼏何⽅法描述
pack()包装;
grid()⽹格;
place()位置;
#!/usr/bin/env python
import os
from time import sleep
from Tkinter import *
class DirList(object):
def __init__(self, initdir=None):
self.top = Tk()
bel = Label(self.top,
text='Directory Lister v1.2')
bel.pack()
self.cwd=StringVar(self.top)
self.dirl = Label(self.top, fg='blue',
font=('Helvetica', 12, 'bold'))
self.dirl.pack()
self.dirfm = Frame(self.top)
self.dirsb = Scrollbar(self.dirfm)
self.dirsb.pack(side=RIGHT, fill=Y)
self.dirs = Listbox(self.dirfm, height=15,
width=50, yscrollcommand=self.dirsb.set) self.dirs.bind('<Double-1>', self.setdirandgo) self.dirsb.config(command=self.dirs.yview) self.dirs.pack(side=LEFT, fill=BOTH)
self.dirfm.pack()
self.dirn = Entry(self.top, width=50,
textvariable=self.cwd)
self.dirn.bind('<Return>', self.dols)
self.dirn.pack()
self.bfm = Frame(self.top)
self.clr = Button(self.bfm, text='Clear',
command=self.clrdir,
activeforeground='white',
activebackground='blue')
self.ls = Button(self.bfm,
text='List Directory',
command=self.dols,
activeforeground='white',
activebackground='green')
self.quit = Button(self.bfm, text='Quit',
command=self.top.quit,
activeforeground='white',
activebackground='red')
self.clr.pack(side=LEFT)
self.ls.pack(side=LEFT)
self.quit.pack(side=LEFT)
self.bfm.pack()
if initdir:
self.cwd.set(os.curdir)
self.dols()
def clrdir(self, ev=None):
self.cwd.set('')
def setdirandgo(self, ev=None):
st = self.cwd.get()
self.dirs.config(selectbackground='red')
check = self.dirs.get(self.dirs.curselection()) if not check:
check = os.curdir
self.cwd.set(check)
self.dols()
def dols(self, ev=None):
error = ''
tdir = self.cwd.get()
if not tdir:
tdir = os.curdir
if not os.path.exists(tdir):
error = tdir + ': no such file'
elif not os.path.isdir(tdir):
if error:
self.cwd.set(error)
self.top.update()
sleep(2)
if not (hasattr(self, 'last') \
and st):
st = os.curdir
self.cwd.set(st)
self.dirs.config(
selectbackground='LightSkyBlue')
self.top.update()
return
self.cwd.set(
'FETCHING DIRECTORY CONTENTS...') self.top.update()
dirlist = os.listdir(tdir)
dirlist.sort()
os.chdir(tdir)
self.dirl.config(text=os.getcwd())
self.dirs.delete(0, END)
self.dirs.insert(END, os.curdir)
self.dirs.insert(END, os.pardir)
for eachFile in dirlist:
self.dirs.insert(END, eachFile)
self.cwd.set(os.curdir)
self.dirs.config(
selectbackground='LightSkyBlue')
def main():
d = DirList(os.curdir)
mainloop()
if __name__ == '__main__':
main()。