生活随笔
收集整理的这篇文章主要介绍了
python--类与GUI编程框架
小编觉得挺不错的,现在分享给大家,帮大家做个参考.
类属性
类的数据属性(静态成员):仅仅是定义的类变量 在类创建后被使用 可以由类的方法来更新,也可以在主程序中更新 类属性和实例无关,修改类属性需要使用类名 class Dog(object):counter=0def __init__(self,name):self.name=nameDog.counter+=1def greet(self):print("Hi,I am %s,my number is %d"%(self.name,Dog.counter))if __name__=="__main__":dog=Dog("Zero")dog.greet() 类的实现需要指定继承类或基类,可以多继承,默认为object基类。上述代码中counter为类的数据属性,需要使用类名访问。
以self来给出成员变量,self.name指明了类具有成员变量name
私用方法和属性
默认情况下,python类的成员属性与方法都是public 提供访问控制符来限定成员函数的访问 双下划线(__):__var属性会被__classname_var替换,防止父类和子类中的同名冲突 单下划线(_):在属性名前使用一个单下划线字符,防止模块的属性用“from mymodule import*”来加载
GUI的基本框架
1.wxPython
基本框架 import wx
app=wx.App()
fram=wx.Frame(None,title="Hello Python")
fram.Show(True)
app.MainLoop()
组件 组件容器(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 事件处理机制 相应鼠标消息 按钮及其家族 wx.Button:文本按钮 wx.BitmapButton:位图按钮 wx.ToggleButton:开关按钮 绑定处理按钮点击事件 菜单及其组件 菜单栏 菜单 菜单项命令 wxPython用于创建菜单的类: wx.Menubar wx.Menu wx.MenuItem 菜单事件:wx.EVT_MENU #绑定事件处理器
self.Bind(wx.EVT_MENU,self.onClickBigger,biggerItem)
self.Bind(wx.EVT_MENU,self.onClickQuit,id=wx.ID_EXIT)#处理事件函数
def onClickBigger(self,e):pass
def onClickQuit(self,e):self.Close()
静态文本(StaticText)和文本框(TextCtrl) 静态文本框(标签): 类:wx.StaticText 文本框,用于接收输入信息 类:wx.TextCtrl 常用形式:单行,多行,富文本 列表 wx.LC_ICON(图标) wx.LC_SMALL_ICON(小图标) wx.LC_LIST(列表) wx.LC_REPORT(报告) 实例: import wxclass AppFrame(wx.Frame):def __init__(self,superior):wx.Frame.__init__(self,parent=superior,title="Exapp",pos=(100,100),size=(800,700))self.panel=wx.Panel(self)# self.text=wx.TextCtrl(panel,value="Hello Client Text!",size=(800,700))self.panel.Bind(wx.EVT_LEFT_UP,self.OnClick)#鼠标左键弹起的事件绑定到派生出的子类的onClick方法上def OnClick(self,event):posm=event.GetPosition()#获取鼠标单击位置wx.StaticText(parent=self.panel,label="Hello Click!",pos=(posm.x,posm.y))#放置一个静态文本控件if __name__=="__main__":app=wx.App()frame=AppFrame(None)frame.Show(True)app.MainLoop()
布局管理: 灵活布局的解决方案:sizer 每个sizer有自己的定位策略,开发者只需要选择适合策略的sizer将窗口组件放入,指定需求即可 sizer它只是一个屏幕布局的算法,不是一个窗口或组件 sizer允许嵌套 wxPython常用的sizer: wx.BoxSizer wx.FlexGridSizer wx.GridSizer wx.GridBagSizer wx.StaticBoxSizer 使用sizer的步骤: 创建自动调节尺寸的容器,如panel 创建sizer 创建子窗口(窗口部件) 使用sizer的Add()将每个部件添加加进去 调用容器的SetSizer(sizer)方法 import wxclass AppFrame(wx.Frame):def __init__(self,superior):wx.Frame.__init__(self,parent=superior,title="Exapp",pos=(100,100),size=(800,700))#self.panel=wx.Panel(self)panel=wx.Panel(self)sizer=wx.BoxSizer(wx.VERTICAL)self.text=wx.TextCtrl(panel,value="Hello Client Text!",size=(200,550),style=wx.TE_MULTILINE)sizer.Add(self.text,0,wx.ALIGN_TOP|wx.EXPAND)button=wx.Button(panel,label="Click Me!")sizer.Add(button)panel.SetSizerAndFit(sizer)panel.Layout()self.Bind(wx.EVT_BUTTON,self.OnClick,button)#self.panel.Bind(wx.EVT_LEFT_UP,self.OnClick)#鼠标左键弹起的事件绑定到派生出的子类的onClick方法上def OnClick(self,text):#posm=event.GetPosition()#获取鼠标单击位置#wx.StaticText(parent=self.panel,label="Hello Click!",pos=(posm.x,posm.y))#放置一个静态文本控件self.text.AppendText("\nHello Click button")if __name__=="__main__":app=wx.App()frame=AppFrame(None)frame.Show(True)app.MainLoop()
2.PyQt
import sys
from PyQt5 import QtWidgetsclass AppWidget(QtWidgets.QWidget):def __init__(self):super().__init__()self.setWindowTitle("Hello Qt Window")self.outputArea=QtWidgets.QTextBrowser()self.AppButton=QtWidgets.QPushButton("click me")self.layout=QtWidgets.QVBoxLayout()self.layout.addWidget(self.outputArea)self.layout.addWidget(self.AppButton)self.setLayout(self.layout)self.AppButton.clicked.connect(self.showText)def showText(self):self.outputArea.append("hello click!")
if __name__=="__main__":app=QtWidgets.QApplication(sys.argv)appWidget=AppWidget()appWidget.show()sys.exit(app.exec_())
3.Tkinter
import tkinter as tkclass AppTk(object):def __init__(self):self.root=tk.Tk()self.text=tk.Text(self.root,width=30,height=10)self.text.pack()self.button=tk.Button(self.root,text="Click me",command=self.showText)self.button.pack()def showText(self):self.text.insert(tk.INSERT,"Hello click!\n")if __name__=="__main__":app=AppTk()app.root.mainloop()
总结
以上是生活随笔 为你收集整理的python--类与GUI编程框架 的全部内容,希望文章能够帮你解决所遇到的问题。
如果觉得生活随笔 网站内容还不错,欢迎将生活随笔 推荐给好友。