数据分析系列 之python中面向对象与GUI的设计
Posted 琅晓琳
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了数据分析系列 之python中面向对象与GUI的设计相关的知识,希望对你有一定的参考价值。
1 面向对象的思想介绍
1.1 这部分可以类比于C++和java中类和对象的知识来进行学习;
1.2 类—描述对象的特征;对象—由数据和方法组成;
1.3 抽象的介绍:
类是对象的抽象,类的具体化是对象(模板),对象相当于类的具体实现;
python中_init_()方法介绍:
(a) 它是对象的初始化方法,当类被调用后,python将创建实例对象;
(b) 创建完对象后,python自动调用的第一个方法;
© 实例对象作为方法的第一个参数self被传递进去,调用类创建实例对象时的参数都传给_init_()。
1.4 继承的介绍:
父类—>基类,子类—>派生类;
举例:
class BMI:
def_init_(self,height,weight):
self.bmi = seight/height**2
def printBMI(self):
print("Your BMI is {:.1f}".format(self.bmi))
# ChinaBMI继承BMI,注意和C++和java写法的区别
class ChinaBMI(BMI):
# 重写printBMI()方法
def printBMI(self):
print("Your BMI is {:.1f}".format(self.bmi))
if self.bmi < 18.5:
print("......")
elif self.bmi < 24:
......
# 实例化
h = float(input("height="))
w = float(input("weight="))
CBMI = ChinaBMI(h , w)
CBMI.print()
2 GUI的设计
2.1 使用wxPython类库;
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple wxpython
2.2 组件:
组件容器(Containers):用于容纳其它组件,例如:wx.Panel;
动态组件(Dynamic Widgets):可以被用户编辑,例如:wx.Button、wx.TextCtrl、wx.ListBox等;
静态组件(Static Widgets):显示信息用,不能被用户编辑,例如:wx.StaticBitmap、wx.StaticText、wx.StaticLine等;
其它组件:例如wx.ToolBar、wx.MenuBar、wx.StatusBar等。
2.3 组件的放置关系:
Text Control < Panel < Frame
2.4 组件介绍:
按钮:wx.Button(文本按钮),wx.BitmapButton(位图按钮),wx.ToggleButton(开关按钮);
菜单:wx.MenuBar,wx.Menu,wx.MenuItem;
静态文本框:wx.StaticText;
文本框:wx.TextCtrl;
列表:wx.LC_ICON(图标),wx.LC_SMALL_ICON(小图标),wx.LC_LIST(列表),wx.LC_REPORT(报告);
单选框和复选框。
2.5 布局管理:
sizer—>定位策略;
wx.BoxSizer:两个方向;
wx.FlexGridSizer:灵活;
wx.GridSizer:网格布局。
2.6 其它的GUI库:
PyQt、Tkinter、PyGTK
2.7 举例:
# 窗体中抬起左键可以创建显示Hello World
import wx
# 创建SubFrame类,继承自wx.Frame
class SubFrame(wx.Frame):
def __init__(self,parent):
wx.Frame.__init__(self, parent=parent, title='Hello World', pos=(100, 200), size=(200, 100))
self.panel = wx.Panel(self)
#鼠标左键抬起时触发时间绑定带OnClick函数
self.panel.Bind(wx.EVT_LEFT_UP, self.OnClick)
# 定义鼠标响应事件:OnClick()
def OnClick(self,event):
posm=event.GetPosition()
# 显示文本
wx.StaticText(parent=self.panel,label='Hello World',pos=(posm.x,posm.y))
if __name__ == '__main__':
app = wx.App()
# 定义frame对象
frame = SubFrame(None)
frame.Show()
app.MainLoop()
# 点击button输出一行hello world
import wx
class SubFrame(wx.Frame):
def __init__(self,parent):
wx.Frame.__init__(self, parent=parent, title='Hello World')
self.panel = wx.Panel(self)
# 垂直布局
sizer=wx.BoxSizer(wx.VERTICAL)
# 采用多行显示
# 文本框:wx.TextCtrl
self.text1=wx.TextCtrl(self.panel,value='Hello World\\n',style=wx.TE_MULTILINE)
# 1为响应容器改变大小,expand占据窗口的整个宽度
sizer.Add(self.text1,1,wx.ALIGN_TOP|wx.EXPAND)
self.button=wx.Button(self.panel,label='click')
self.Bind(wx.EVT_BUTTON,self.OnClick,self.button)
sizer.Add(self.button)
self.panel.SetSizerAndFit(sizer)
self.panel.Layout()
# 响应button事件
def OnClick(self,event):
self.text1.AppendText('Hello World\\n')
if __name__ == '__main__':
app = wx.App()
frame = SubFrame(None)
frame.Show()
app.MainLoop()
# 输出单选按钮的内容到文本框
import wx
class SubFrame(wx.Frame):
def __init__(self,parent):
wx.Frame.__init__(self, parent=parent, title='Hello World',size=(300,300))
self.panel = wx.Panel(self)
lblList = ['First', 'Second', 'Third']
self.rbox = wx.RadioBox(self.panel, label='RadioBox', pos=(0, 20), choices=lblList,majorDimension=1, style=wx.RA_SPECIFY_ROWS)
self.rbox.Bind(wx.EVT_RADIOBOX, self.onRadioBox)
self.button=wx.Button(self.panel,label='button',pos=(0,100))
self.Bind(wx.EVT_BUTTON,self.onclick) - self.text1=wx.TextCtrl(self.panel,
style=wx.TE_MULTILINE,
pos=(0,150),size=(300,50))
def onclick(self,event):
self.text1.AppendText(self.rbox.GetStringSelection())
def onRadioBox(self, e):
print(self.rbox.GetSelection())
if __name__ == '__main__':
app = wx.App()
frame = SubFrame(None)
frame.Show()
app.MainLoop()
以上是关于数据分析系列 之python中面向对象与GUI的设计的主要内容,如果未能解决你的问题,请参考以下文章