生活随笔
收集整理的這篇文章主要介紹了
python--类与GUI编程框架
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
類(lèi)屬性
類(lèi)的數(shù)據(jù)屬性(靜態(tài)成員):僅僅是定義的類(lèi)變量 在類(lèi)創(chuàng)建后被使用 可以由類(lèi)的方法來(lái)更新,也可以在主程序中更新 類(lèi)屬性和實(shí)例無(wú)關(guān),修改類(lèi)屬性需要使用類(lèi)名 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() 類(lèi)的實(shí)現(xiàn)需要指定繼承類(lèi)或基類(lèi),可以多繼承,默認(rèn)為object基類(lèi)。上述代碼中counter為類(lèi)的數(shù)據(jù)屬性,需要使用類(lèi)名訪(fǎng)問(wèn)。
以self來(lái)給出成員變量,self.name指明了類(lèi)具有成員變量name
私用方法和屬性
默認(rèn)情況下,python類(lèi)的成員屬性與方法都是public 提供訪(fǎng)問(wèn)控制符來(lái)限定成員函數(shù)的訪(fǎng)問(wèn) 雙下劃線(xiàn)(__):__var屬性會(huì)被__classname_var替換,防止父類(lèi)和子類(lèi)中的同名沖突 單下劃線(xiàn)(_):在屬性名前使用一個(gè)單下劃線(xiàn)字符,防止模塊的屬性用“from mymodule import*”來(lái)加載
GUI的基本框架
1.wxPython?
基本框架 import wx
app=wx.App()
fram=wx.Frame(None,title="Hello Python")
fram.Show(True)
app.MainLoop() ?
組件 組件容器(Containers)----用于容納其他組件,wx.panel 動(dòng)態(tài)組件(Dynamic Widgets)----可以被用戶(hù)編輯,wx.Button,wx.TextCtrl,wx.ListBox 靜態(tài)組件(Static Widgets)----顯示信息用,不被用戶(hù)編輯,wx.StaticBitmap,wx.StaticText,wx.StaticLine 其他組件----wx.ToolBar,wx.MenuBar,wx.StatusBar 事件處理機(jī)制 相應(yīng)鼠標(biāo)消息 按鈕及其家族 wx.Button:文本按鈕 wx.BitmapButton:位圖按鈕 wx.ToggleButton:開(kāi)關(guān)按鈕 綁定處理按鈕點(diǎn)擊事件 菜單及其組件 菜單欄 菜單 菜單項(xiàng)命令 wxPython用于創(chuàng)建菜單的類(lèi): 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)#處理事件函數(shù)
def onClickBigger(self,e):pass
def onClickQuit(self,e):self.Close()
?
靜態(tài)文本(StaticText)和文本框(TextCtrl) 靜態(tài)文本框(標(biāo)簽): 類(lèi):wx.StaticText 文本框,用于接收輸入信息 類(lèi):wx.TextCtrl 常用形式:單行,多行,富文本 列表 wx.LC_ICON(圖標(biāo)) wx.LC_SMALL_ICON(小圖標(biāo)) wx.LC_LIST(列表) ?wx.LC_REPORT(報(bào)告) 實(shí)例: 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)#鼠標(biāo)左鍵彈起的事件綁定到派生出的子類(lèi)的onClick方法上def OnClick(self,event):posm=event.GetPosition()#獲取鼠標(biāo)單擊位置wx.StaticText(parent=self.panel,label="Hello Click!",pos=(posm.x,posm.y))#放置一個(gè)靜態(tài)文本控件if __name__=="__main__":app=wx.App()frame=AppFrame(None)frame.Show(True)app.MainLoop()
布局管理: 靈活布局的解決方案:sizer 每個(gè)sizer有自己的定位策略,開(kāi)發(fā)者只需要選擇適合策略的sizer將窗口組件放入,指定需求即可 sizer它只是一個(gè)屏幕布局的算法,不是一個(gè)窗口或組件 sizer允許嵌套 wxPython常用的sizer: wx.BoxSizer wx.FlexGridSizer wx.GridSizer wx.GridBagSizer wx.StaticBoxSizer 使用sizer的步驟: 創(chuàng)建自動(dòng)調(diào)節(jié)尺寸的容器,如panel 創(chuàng)建sizer 創(chuàng)建子窗口(窗口部件) 使用sizer的Add()將每個(gè)部件添加加進(jìn)去 調(diào)用容器的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)#鼠標(biāo)左鍵彈起的事件綁定到派生出的子類(lèi)的onClick方法上def OnClick(self,text):#posm=event.GetPosition()#獲取鼠標(biāo)單擊位置#wx.StaticText(parent=self.panel,label="Hello Click!",pos=(posm.x,posm.y))#放置一個(gè)靜態(tài)文本控件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()
?
?
?
?
?
?
總結(jié)
以上是生活随笔 為你收集整理的python--类与GUI编程框架 的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
如果覺(jué)得生活随笔 網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔 推薦給好友。