由于在Python 3.x上安装wx失败 所以最后使用 Tkinter实现,python2.x在这个模块上还是有挺多的区别的。
创建并运行GUI程序的基本步骤:
1. 导入tkinter模块 (Python 3.x)
结合2, 我导入了部分需要的子模块
from tkinter import Tk, Button,Frame, Label, Entry, filedialog,
2. 创建一个顶层窗口对象 需要一个放置所有组件的地方
top=tkinter.Tk() 或 root=tkinter.Tk() 通常被称为根窗口,顶层窗口是指那些在程序中独立显示的部分,可在GUI程序中创建多个顶层窗口,但是他们中只能有一个是根窗口
3. 在顶层窗口对象中创建所有的GUI模块
button 按钮,canvas 画布,checkbutton 选择按钮, entry 文本框,frame 框架,label 标签, listbox 列表框,menu 菜单,menubutton 菜单按钮,message 消息框,radiobutton 单选按钮,
scale 进度条,线性滑块组件
scrollbar 滚动条,
text 文本域,收集或显示用户输入的文字
toplevel 顶级
4. 把这些GUI模块与底层代码相连接
事件驱动处理,组件会有一些相应的行为,例如按钮被按下,或者文本框被写入,这种形式的用户行为被称为事件(event),GUI程序对事件所采取的响应动作被称为回调(callback)
5. 进入主事件循环
一旦packer决定好组件的尺寸和对齐方式,它将会在屏幕上放置它们,当所有这些组件,包括顶层窗口,最终显示在屏幕上时,GUI程序就会进入一个“服务器式”的无限循环。这个无限循环包括等待GUI事件、处理事件、然后返回等待模式,等待下一个事件。
tkinter.mainoop()
一个简单的例子 之前写了一个 makeMoma.py的脚本实现某种图片处理,这里尝试添加一个GUI
import os
from tkinter import Tk, Button,Frame, Label, Entry, filedialog
from makeMona import *
CurDir=os.getcwd()
OpenFileDir=CurDir
SaveFileDir=CurDir
def callback_input_dir():
global CurDir
global OpenFileDir
OpenFileDir=filedialog.askopenfilename(initialdir=CurDir)
entry1.insert(0,OpenFileDir)
print ('callback input dir')
def callback_output_dir():
global CurDir
global SaveFileDir
entry2.insert(0,filedialog.askdirectory(initialdir=CurDir))
print('callback input dir')
def callback_start_run():
print('running')
global OpenFileDir
global SaveFileDir
SaveFileDir=entry2.get()
masaic_picture(OpenFileDir,SaveFileDir) #function in makeMode
root = Tk()
root.title('masaic picture')
win=Frame(root)
label1= Label(root,text="Picture Path:",font='Helvetica -12 bold')
label1.grid(row=0,column=0)
label2=Label(root,text="Output Path:",font='Helvetica -12 bold')
label2.grid(row=1,column=0)
entry1= Entry(root)
entry1.grid(row=0,column=1)
entry2=Entry(root)
entry2.grid(row=1,column=1)
button1=Button(root,text='select',command=callback_input_dir)
button1.grid(row=0,column=2)
button2=Button(root,text='select',command=callback_output_dir)
button2.grid(row=1,column=2)
button3=Button(root,text='START RUN',command=callback_start_run)
button3.grid(row=2,column=0)
root.mainloop()