日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

python--类与GUI编程框架

發布時間:2024/7/19 python 21 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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编程框架的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。