Tips: 本文创建于2017年2月23日,已超过 2 年,内容或图片可能已经失效!
文章目录[隐藏]

发烧了,苦逼

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 可以更加方便的使用
import wx # 导入wx模块  
  
app = wx.App() # 创建一个应用对象  
frame = wx.Frame(None, title="Simple Editor", size = (410,335)) # 新建一个窗口,None表示顶级组件  
loadButton = wx.Button(frame, label = 'open', pos = (225,5), size=(80,25)) # 在窗口上添加一个按钮,文字为open  
saveButton = wx.Button(frame, label = 'save', pos = (315,5), size=(80,25))  
filename = wx.TextCtrl(frame, pos = (5,5), size = (210,25), value = "filename") # value 默认内容 filename  
contents = wx.TextCtrl(frame, pos = (5,35), size = (390,260), style = wx.TE_MULTILINE|wx.HSCROLL) # style 水平垂直有滚动条  
frame.Show()  
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
app = wx.App()  
win = wx.Frame(None, title = "simple Editor", size=(410,335))  
bkg = wx.Panel(win) # 把win放在画布上  
loadButton = wx.Button(bkg, label = "open")  
saveButton = wx.Button(bkg, label = "save")  
filename = wx.TextCtrl(bkg)  
contents = wx.TextCtrl(bkg, style = wx.TE_MULTILINE|wx.HSCROLL)  
  
# 创建尺寸器  
hbox = wx.BoxSizer() # 默认水平,wx.VERTICAL 垂直的尺寸器  
hbox.Add(filename,proportion = 1, flag = wx.EXPAND) # proportion 比例,wx.EXPAND  指定方向全部填充  
hbox.Add(loadButton, proportion = 0, flag = wx.LEFT, border = 5)  
hbox.Add(saveButton,proportion = 0, flag = wx.LEFT, border = 5)  
  
vbox = wx.BoxSizer(wx.VERTICAL) # 创建垂直尺寸器  
vbox.Add(hbox,proportion = 0,flag = wx.EXPAND|wx.ALL,border = 5)  
vbox.Add(contents, proportion = 1, flag = wx.EXPAND|wx.LEFT|wx.BOTTOM|wx.RIGHT,border=5)  
  
bkg.SetSizer(vbox)  
win.Show()  
app.MainLoop()  

事件处理

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

语法

def load(event):#只能传这个参数,不能传其他参数,  
    path = finename.GetValue()  
  • 绑定文本
f = open(path,"r")  
content.SetValue(f.read())  
f.close()  

例子:

# 下面创建文件,读写文件  
def load(event):  
    file = open(filename.GetValue())  
    contents.SetValue(file.read())  
    file.close()  
def save(event):  
    file = open(filename.GetValue(),'w')  
    file.write(contents.GetValue())  
    file.close()  
app = wx.App()  
win = wx.Frame(None,title='Simple Editor',size=(410,335))  
bkg = wx.Panel(win)  
loadButton = wx.Button(bkg,label='open')  
loadButton.Bind(wx.EVT_BUTTON,load)  
saveButton = wx.Button(bkg,label='save')  
saveButton.Bind(wx.EVT_BUTTON,save)  
filename = wx.TextCtrl(bkg)  
contents = wx.TextCtrl(bkg,style=wx.TE_MULTILINE|wx.HSCROLL)  
hbox = wx.BoxSizer()  
hbox.Add(filename,proportion = 50,flag = wx.EXPAND)  
hbox.Add(loadButton,proportion = 1,flag = wx.LEFT,border = 5)  
hbox.Add(saveButton,proportion = 1,flag = wx.LEFT,border = 5)  
vbox = wx.BoxSizer(wx.VERTICAL)  
vbox.Add(hbox,proportion = 0,flag = wx.EXPAND|wx.ALL,border = 5)  
vbox.Add(contents,proportion = 1,flag = wx.EXPAND|wx.LEFT|wx.BOTTOM|wx.RIGHT,border = 5)  
bkg.SetSizer(vbox)  
win.Show()  
app.MainLoop() 

Tkinter

例子一

from Tkinter import *  
class Application(Frame):  
    def __init__(self,master=None):  
        Frame.__init__(self,master)  
        self.pack()  
        self.createWidgets()  
    def createWidgets(self):  
        self.helloLabel = Label(self,text='Hello World')  
        self.helloLabel.pack()  
        self.quitButton = Button(self,text='Quit',command=self.quit)  
        self.quitButton.pack()  
app = Application()  
app.master.title('hello world')  
app.mainloop()  

例子二

from Tkinter import *  
import tkMessageBox  
  
class Application(Frame):  
    def __init__(self,master=None):  
        Frame.__init__(self,master)  
        self.pack()  
        self.createWidgets()  
    def createWidgets(self):  
        self.nameInput = Entry(self)  
        self.nameInput.pack()  
        self.alertButton = Button(self,text='hello',command=self.hello)  
        self.alertButton.pack()  
    def hello(self):  
        name = self.nameInput.get() or 'world'  
        tkMessageBox.showinfo('Message','hello,%s'%name)  
app = Application()  
app.master.title('Hello world')  
app.mainloop()