python--类与GUI编程框架

类属性

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

  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 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()

  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 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

  1. 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

  1. 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()

 

 

 

 

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/484415.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

信道复用技术之码分复用

2020730第一次修改:提升了图片的清晰度 1. 首先来说说什么是信道复用 信道复用,顾名思义,就是把多个用户使用的信道合并在一条信道,即一条信道承载着多个用户传输数据的任务; ps:信道:数据信息传…

《新一代城市大脑建设与发展》专家研讨会在京举办

2021年6月26日,新一代城市大脑建设与发展专家研讨会在京举办,本次活动由城市大脑全球标准研究组主办,远望智库承办。20多位专家参与本次研讨会,对城市大脑、智慧城市的发展趋势,存在的问题,产生的新成果等方…

【基于Python+Flask项目部署系列--03】开发测试环境配置-基于Ubuntu16.04

一、开发测试环境介绍 前提已经部署完【基于PythonFlask项目部署系列--02】Ubuntu16.04服务器安装。建议部署2套环境:开发测试环境生产环境。 这篇文章主要讲解测试环境如何配置python flask项目与运行。 测试环境主要使用【虚拟环境】进行部署代码部署,…

机器学习

机器学习 sklearn基础功能: 主要使用python的sklearn库:sklearn库共分为6大部分,分别用于完成分类任务、回归任务、聚类任务、降维任务、模型选择以及数据的预处理。各模块功能介绍 分类任务分类模型加载模块最近邻算法neighbors.NearestNeighbors支持…

费米悖论的三十种解释

© David B. Mattingly来源:利维坦 文:Ella Alderson译:Rachel校对:Yord原文:/medium.com/predict/30-solutions-to-the-fermi-paradox-aaabfce56280利维坦按:我个人现阶段觉得,与其说接受宇…

无监督学习

目标 利用无标签的数据学习数据的分布或数据与数据之间的关系被称作无监督学习。 有监督学习与无监督学习的最大去区别在于数据是否有标签。 无监督学习最常见的应用场景是聚类和降维。 聚类 聚类,就是根据数据的“相似性”将数据分为多类的过程。相似性评估&am…

重磅!三星宣布3nm成功流片!

来源:世界先进制造技术论坛(AMT)编辑:小艾 6月29日,据外媒最新报道,三星宣布,3nm制程技术已经正式流片! 据悉,三星的3nm制程采用的是GAA架构,性能上完胜台积电的3nm FinFET架构!据报导&#xff…

前端实战:仿写小米官网第一天

前端实战的第一天 小米官网 目前效果: 实现功能: 导航栏,首页切换,无淡入淡出效果的轮播图,搜索功能,产品展示栏下滑 代码(便于记录,将js、css和html糅合在了一起)&…

ubuntuxu双系统安装+git/g++/vim+pytorch+opencv+yolo+sitl相关学习

multirotor The first day ——12.10 1.install vmware-workstation and ubuntu swap sources and 换输入法 2.learn git github关联远程仓库 3.install and use Typora Git codemeaningmkdir test创建目录cd test进入目录git init初始化仓库ls ;ls -ah查看目…

MySQL日志详细说明

这片博文我们会详细说明MySQL本身的日志,不包含重做日志和undo日志(这两个日志是innodb存储引擎的日志)。 MySQL本身的日志有以下几种(MySQL5.7版本): 错误日志慢查询日志通用日志二进制日志错误日志 默认情…

python-DBSCAN密度聚类

1.DBSCAN 算法是一种基于密度的聚类算法: 聚类的时候不需要预先指定簇的个数。最终的簇的个数不定。 2.DBSCAN 算法将数据点分为三类: 核心点:在半径Eps内含有超过MinPts数目的点边界点:在半径Eps内点的数量小于MinPts&#xff…

院士报告 | 李德仁:基于数字孪生的智慧城市(PPT)

来源:转自智慧城市大讲堂,微信编辑:邱峰、罗兵,张钦煜微信审核:张祥、吴斌、数字理政研究院、中通协大数据分会本文为首届川渝住房城乡建设博览会——川渝数智城市BIM/CIM高峰论坛上,中国科学院院士、中国工…

Hanlp的安装和配置

Hanlp简介 HanLP 是由一系列模型与算法组成的 Java 工具包,目标是普及自然语言处理在生产环境中的应用。 HanLP 具备功能完善、性能高效、架构清晰、语料时新、可自定义的特点。 HanLP 提供下列功能: 中文分词最短路分词N-最短路分词CRF分词索引分词极…

python-主成分分析-降维-PCA

PCA算法及其应用 主成分分析(PCA) 主城成分分析(PCA):常见的降维方法,用于高维数据集的探索与可视化,还可以用作数据压缩和预处理。 PCA 可以把具有相关性的高维变量合成为线性无关的低维变量,成为主成分&…

5个基本概念,从统计学到机器学习

来源:CSDN作者:George Seif本文讲述了数据分析师应当了解的五个统计基本概念:统计特征、概率分布、降维、过采样/欠采样、贝叶斯统计方法。从高的角度来看,统计学是一种利用数学理论来进行数据分析的技术。象柱状图这种基本的可视…

Ubuntu安装与配置(简要)

学校的实验课任务,一看没有写过Ubuntu的安装,现在顺便上传上来;

python-非负矩阵分解-NMF

非负矩阵分解 非负矩阵分解是矩阵中所有元素均为非负数约束条件下的矩阵分解,其基本思想:给定一个非负矩阵V,NMF能够找到一个非负矩阵W和一个非负矩阵H,使得矩阵W和矩阵H的乘积近似等于矩阵V中的值。 矩阵:被称为基础…

OpenAI与GitHub联手推出AI代码生成工具,比GPT-3更强大

来源:AI科技评论作者:琰琰、青暮比GPT-3更强大!昨日,微软与OpenAI共同推出了一款AI编程工具GitHub Copilot,这款工具基于GitHub及其他网站的源代码,可根据上文提示为程序员自动编写下文代码!Git…

Hanlp之理解用户自定义词典(java版本)

首先说明,由于本人水平有限,文章纰漏以及不妥之处还请指出,不胜感激; 理解hanlp中用户自定义词典(java) 什么是hanlp用户自定义字典?为什么要有用户自定义词典? 在Hanlp分词中&…