python--类与GUI编程框架

类属性

  1. 类的数据属性(静态成员):仅仅是定义的类变量
  2. 在类创建后被使用
  3. 可以由类的方法来更新,也可以在主程序中更新
  4. 类属性和实例无关,修改类属性需要使用类名
    class Dog(object):
        counter=0
        def __init__(self,name):
            self.name=name
            Dog.counter+=1
            
        def 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为类的数据属性,需要使用类名访问。

  5. 以self来给出成员变量,self.name指明了类具有成员变量name

私用方法和属性

  1. 默认情况下,python类的成员属性与方法都是public
  2. 提供访问控制符来限定成员函数的访问
    1. 双下划线(__):__var属性会被__classname_var替换,防止父类和子类中的同名冲突
    2. 单下划线(_):在属性名前使用一个单下划线字符,防止模块的属性用“from mymodule import*”来加载

GUI的基本框架

1.wxPython 

  1. 基本框架
    1. import wx
      app=wx.App()
      fram=wx.Frame(None,title="Hello Python")
      fram.Show(True)
      app.MainLoop()

       

  2. 组件
    1. 组件容器(Containers)----用于容纳其他组件,wx.panel
    2. 动态组件(Dynamic Widgets)----可以被用户编辑,wx.Button,wx.TextCtrl,wx.ListBox
    3. 静态组件(Static Widgets)----显示信息用,不被用户编辑,wx.StaticBitmap,wx.StaticText,wx.StaticLine
    4. 其他组件----wx.ToolBar,wx.MenuBar,wx.StatusBar
  3. 事件处理机制
    1. 相应鼠标消息
    2. 按钮及其家族
      1. wx.Button:文本按钮
      2. wx.BitmapButton:位图按钮
      3. wx.ToggleButton:开关按钮
      4. 绑定处理按钮点击事件
    3. 菜单及其组件
      1. 菜单栏
      2. 菜单
      3. 菜单项命令
      4. wxPython用于创建菜单的类:
        1. wx.Menubar
        2. wx.Menu
        3. wx.MenuItem
      5. 菜单事件:wx.EVT_MENU
        1. #绑定事件处理器
          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()
          

           

    4. 静态文本(StaticText)和文本框(TextCtrl)
      1. 静态文本框(标签):
        1. 类:wx.StaticText
      2. 文本框,用于接收输入信息
        1. 类:wx.TextCtrl
        2. 常用形式:单行,多行,富文本
    5. 列表
      1. wx.LC_ICON(图标)
      2. wx.LC_SMALL_ICON(小图标)
      3. wx.LC_LIST(列表)
      4.  wx.LC_REPORT(报告)
  4. 实例:
    1. import wx
      
      class 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()

  5. 布局管理:
    1. 灵活布局的解决方案:sizer
      1. 每个sizer有自己的定位策略,开发者只需要选择适合策略的sizer将窗口组件放入,指定需求即可
      2. sizer它只是一个屏幕布局的算法,不是一个窗口或组件
      3. sizer允许嵌套
      4. wxPython常用的sizer:
        1. wx.BoxSizer
        2. wx.FlexGridSizer
        3. wx.GridSizer
        4. wx.GridBagSizer
        5. wx.StaticBoxSizer
    2. 使用sizer的步骤:
      1. 创建自动调节尺寸的容器,如panel
      2. 创建sizer
      3. 创建子窗口(窗口部件)
      4. 使用sizer的Add()将每个部件添加加进去
      5. 调用容器的SetSizer(sizer)方法
    3. import wx
      
      class 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

  1. import sys
    from PyQt5 import QtWidgets
    
    class 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

  1. import tkinter as tk
    
    class 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()

 

 

 

 

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

秘境之眼

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值