Python 系列(16) 图形化

Posted on Posted in python

发烧了,苦逼

### wx

> 几种常见的图形化模块:

- tkinter 使用 TK 平台,版标准化 本身是一个老资格的图形化,国外图形化一般使用 TK 来写,
- wxpython 基于 wxwindows 跨平台
- pythonwin 使用用于 windows 一般用来写 (钩子)外挂
- pyGTK 使用 GTK 平台 流行于 linux
- pyqt 使用 QT 平台 跨平台

> python 三种py文件

- py --- 脚本文件
- pyc --- 运行之后的临时文件
- pyw --- 专门用来写图形化的

> 窗口组件

- Frame (窗口)除了 wx本身,所有python 代码单词首字母大写
- parent 父元素,指组件的父组件,如果为 None 就代表该组件是顶级组件,
- id 编号,是对组件的区分,在同一个图形化当中不能出现相同ID 的组件
若果 id 为 -1 代表系统自动分配id
(当图形化小时,没有问题,当有N个时,自己不知道,id是否被使用,就让系统自动分配)
- title 标题,就是窗口的标题
- pos 位置,需要一个双元素元组的参数,形成一个坐标点,来标识该组件的位置,
以图形化左上角点的距离 计算机左上角的坐标,来确定位置,
- size 大小,也需要一个双元素元组的参数,来描述组件的长宽
- style 样式,描述组件的样式
- name 同样来标识组件,类似(html 中的,class,),id 太长的时候,name 可以更加方便的使用

  1. import wx # 导入wx模块  
  2.   
  3. app = wx.App() # 创建一个应用对象  
  4. frame = wx.Frame(None, title="Simple Editor", size = (410,335)) # 新建一个窗口,None表示顶级组件  
  5. loadButton = wx.Button(frame, label = 'open', pos = (225,5), size=(80,25)) # 在窗口上添加一个按钮,文字为open  
  6. saveButton = wx.Button(frame, label = 'save', pos = (315,5), size=(80,25))  
  7. filename = wx.TextCtrl(frame, pos = (5,5), size = (210,25), value = "filename") # value 默认内容 filename  
  8. contents = wx.TextCtrl(frame, pos = (5,35), size = (390,260), style = wx.TE_MULTILINE|wx.HSCROLL) # style 水平垂直有滚动条  
  9. frame.Show()  
  10. app.MainLoop()  

> 尺寸器

尺寸器布局:尺寸器布局对简单的布局来说是复杂化了,但是对复杂的布局来说是变的简单了,在wx内进行布局的最简单方法是使用尺寸器(sizer),最容易使用的工具是wx.BoxSizer。尺寸器会管理组件的尺寸。只要将部件添加到尺寸器上,再加上一些布局参数,然后让尺寸器自己去管理父组件的尺寸。
- panel 画布 抽象的概念,布局是在画布上布局
- 创建尺寸器BoxSizer
默认水平尺寸器
wx.VERTICAL 垂直的尺寸器
- 添加组件
组件的参数
name 组件的名称
proportion 比例
flag 填充
填充又分为两步
填充的样式
wx.EXPAND 指定方向全部填充
填充的方向
wx.ALL 全部
wx.TOP 上
wx.BOTTOM 居中
wx.LEFT 左
wx.RIGHT 右
border 边框
- 声明主尺寸器
Setsizer

  1. app = wx.App()  
  2. win = wx.Frame(None, title = "simple Editor", size=(410,335))  
  3. bkg = wx.Panel(win) # 把win放在画布上  
  4. loadButton = wx.Button(bkg, label = "open")  
  5. saveButton = wx.Button(bkg, label = "save")  
  6. filename = wx.TextCtrl(bkg)  
  7. contents = wx.TextCtrl(bkg, style = wx.TE_MULTILINE|wx.HSCROLL)  
  8.   
  9. # 创建尺寸器  
  10. hbox = wx.BoxSizer() # 默认水平,wx.VERTICAL 垂直的尺寸器  
  11. hbox.Add(filename,proportion = 1, flag = wx.EXPAND) # proportion 比例,wx.EXPAND  指定方向全部填充  
  12. hbox.Add(loadButton, proportion = 0, flag = wx.LEFT, border = 5)  
  13. hbox.Add(saveButton,proportion = 0, flag = wx.LEFT, border = 5)  
  14.   
  15. vbox = wx.BoxSizer(wx.VERTICAL) # 创建垂直尺寸器  
  16. vbox.Add(hbox,proportion = 0,flag = wx.EXPAND|wx.ALL,border = 5)  
  17. vbox.Add(contents, proportion = 1, flag = wx.EXPAND|wx.LEFT|wx.BOTTOM|wx.RIGHT,border=5)  
  18.   
  19. bkg.SetSizer(vbox)  
  20. win.Show()  
  21. app.MainLoop()  

> 事件处理

- GetValue 获取 value 内容
- SetValue 设置 value 内容

语法

  1. def load(event):#只能传这个参数,不能传其他参数,  
  2.     path = finename.GetValue()  

- 绑定文本

  1. f = open(path,"r")  
  2. content.SetValue(f.read())  
  3. f.close()  

例子:

  1. # 下面创建文件,读写文件  
  2. def load(event):  
  3.     file = open(filename.GetValue())  
  4.     contents.SetValue(file.read())  
  5.     file.close()  
  6. def save(event):  
  7.     file = open(filename.GetValue(),'w')  
  8.     file.write(contents.GetValue())  
  9.     file.close()  
  10. app = wx.App()  
  11. win = wx.Frame(None,title='Simple Editor',size=(410,335))  
  12. bkg = wx.Panel(win)  
  13. loadButton = wx.Button(bkg,label='open')  
  14. loadButton.Bind(wx.EVT_BUTTON,load)  
  15. saveButton = wx.Button(bkg,label='save')  
  16. saveButton.Bind(wx.EVT_BUTTON,save)  
  17. filename = wx.TextCtrl(bkg)  
  18. contents = wx.TextCtrl(bkg,style=wx.TE_MULTILINE|wx.HSCROLL)  
  19. hbox = wx.BoxSizer()  
  20. hbox.Add(filename,proportion = 50,flag = wx.EXPAND)  
  21. hbox.Add(loadButton,proportion = 1,flag = wx.LEFT,border = 5)  
  22. hbox.Add(saveButton,proportion = 1,flag = wx.LEFT,border = 5)  
  23. vbox = wx.BoxSizer(wx.VERTICAL)  
  24. vbox.Add(hbox,proportion = 0,flag = wx.EXPAND|wx.ALL,border = 5)  
  25. vbox.Add(contents,proportion = 1,flag = wx.EXPAND|wx.LEFT|wx.BOTTOM|wx.RIGHT,border = 5)  
  26. bkg.SetSizer(vbox)  
  27. win.Show()  
  28. app.MainLoop()  

### Tkinter

例子一

  1. from Tkinter import *  
  2. class Application(Frame):  
  3.     def __init__(self,master=None):  
  4.         Frame.__init__(self,master)  
  5.         self.pack()  
  6.         self.createWidgets()  
  7.     def createWidgets(self):  
  8.         self.helloLabel = Label(self,text='Hello World')  
  9.         self.helloLabel.pack()  
  10.         self.quitButton = Button(self,text='Quit',command=self.quit)  
  11.         self.quitButton.pack()  
  12. app = Application()  
  13. app.master.title('hello world')  
  14. app.mainloop()  

例子二

  1. from Tkinter import *  
  2. import tkMessageBox  
  3.   
  4. class Application(Frame):  
  5.     def __init__(self,master=None):  
  6.         Frame.__init__(self,master)  
  7.         self.pack()  
  8.         self.createWidgets()  
  9.     def createWidgets(self):  
  10.         self.nameInput = Entry(self)  
  11.         self.nameInput.pack()  
  12.         self.alertButton = Button(self,text='hello',command=self.hello)  
  13.         self.alertButton.pack()  
  14.     def hello(self):  
  15.         name = self.nameInput.get() or 'world'  
  16.         tkMessageBox.showinfo('Message','hello,%s'%name)  
  17. app = Application()  
  18. app.master.title('Hello world')  
  19. app.mainloop()  
» 转载请注明来源:若我若鱼 » Python 系列(16) 图形化

Leave a Reply

Your email address will not be published. Required fields are marked *

fourteen + six =