实例1: 对输入的所有数字求和, 最后以. 结束输入

def fun():
list1=[]
print('input a number:')
while True:
num=input()
if num=='.':
break
list1.append(eval(num))
sum1=sum(list1)
return sum1

程序简单, 但是输入输出不友好, 怎么做一个友好界面? GUI

GUI的设计需要用到面向对象设计

以按钮(button)为例, quit按钮有很多属性, 包括label(按钮文字), size, pos,font....

方法也很多, 包括setlabel(设置按钮的文字), setdefualt, enable(把按钮设置为可以操作的状态)..

实例: 创建一个简单的wxpython程序

import wx
app=wx.App() #创建一个应用程序对象
frame=wx.Frame(None,title='hello world!') # 创建一个frame对象
# frame是GUI组件的容器, 没有就无法显式GUI了
frame.Show(True) # 显示窗体
app.MainLoop() # 必须写, 否则没有响应

得到一个窗体, 名字为hello,world!

上述程序也可以改写为:

import wx
class myapp(wx.App):
def Oninit(self): # 在事件一开始Mainloop就会被调用
frame=wx.Frame(None,title='hello,world!')
frame.Show()
return True
if __name__=='__main__':
app=myapp()
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

实例

del app
import wx
class frame1(wx.Frame):
def __init__(self,superior):
wx.Frame.__init__(self,parent=superior,title='Example',
pos=(100,200),size=(350,200))
panel=wx.Panel(self) # 新增文本输入框的位置, 文字内容
text1=wx.TextCtrl(panel,value='hello,world!',size=(350,200)) if __name__=='__main__':
app=wx.App()
frame=frame1(None)
frame.Show(True)
app.MainLoop()

TextControl 的父窗口是Panel, panel 的父窗口是frame

提示:在Anaconda中运行程序如果出现“PyNoAppError: The wx.App object must be created first!”这样的错误,请在Python Shell中执行del app即可!

事件处理: event handling

事件: 移动鼠标Onmove() , 按下左键, 单击按钮等...

del app
import wx
class frame1(wx.Frame):
def __init__(self,superior):
wx.Frame.__init__(self,parent=superior,title='Example',
pos=(100,200),size=(350,200))
self.panel=wx.Panel(self) # 新增文本输入框的位置, 文字内容
self.panel.Bind(wx.EVT_LEFT_UP,self.OnClick)
# 将鼠标左键抬起事件绑定到 OnClick子类, 当左键抬起, OnClick方法就会被调用
def OnClick(self,event):
posm=event.GetPosition() # 获得鼠标单击的位置
wx.StaticText(parent=self.panel,label='hello, world!',pos=(posm.x,posm.y))
# 在鼠标单击的位置放置静态文本控件hello world if __name__=='__main__':
app=wx.App()
frame=frame1(None)
frame.Show(True)
app.MainLoop()

python(9): GUI的更多相关文章

  1. Python 图形 GUI 库 pyqtgraph

    原文  Python 图形 GUI 库 pyqtgraph pyqtgraph 是纯 Python 图形 GUI 库,基于PyQT4 /pyside和NumPy.它主要目的用于在数学/科学/工程中.M ...

  2. 关于python写GUI桌面应用的一些研究结果

    研究了一下python开发GUI桌面应用的解决方案,研究结果记录如下: EasyGui:控件极为简单,连个基本的grid.list组件都没有,不适合商用,甚至是普通的应用都不行,放弃! Tkinter ...

  3. 《Python 数据库 GUI CGI编程》

    本文地址:http://www.cnblogs.com/aiweixiao/p/8390417.html 原文地址 点击关注微信公众号 wenyuqinghuai 1.写在前边 上一次,我们介绍了Py ...

  4. Python的GUI编程(TK)

    TK在大多数 Unix平台.Windows平台和Macintosh系统都是预装好的,TKinter 模块是 Tk GUI 套件的标准Python接口.可实现Python的GUI编程. Tkinter模 ...

  5. Python的 GUI 框架

    Python的 GUI 框架 Tkinter Python内嵌的gui环境,使用TCL实现,python IDLE由Tkinter实现 历史悠久,perl中有对应的perlTk.Python标准安装包 ...

  6. 以Tkinter模块来学习Python实现GUI(图形用户界面)编程

    tk是什么:它是一个图形库,支持多个操作系统,使用tcl语言开发的.tkinter是Python内置的模块, 与tk类似的第三方图形库(GUI库)还有很多,比如:Qt,GTK,wxWidget,wxP ...

  7. Python开发GUI工具介绍,实战:将图片转化为素描画!【华为云技术分享】

    版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog.csdn.net/devcloud/article/detai ...

  8. Python开发GUI工具介绍,实战:将图片转化为素描画!

    欢迎添加华为云小助手微信(微信号:HWCloud002 或 HWCloud003),输入关键字"加群",加入华为云线上技术讨论群:输入关键字"最新活动",获取华 ...

  9. Python开发GUI实战:图片转换素描画工具!

    奋斗没有终点 好好学习72变,因为将来 没有人能替你阻挡81难 . 生如蝼蚁,当有鸿鹄之志: 命如纸薄,应有不屈之心 . ​ 今天被这句话触动了,所以开篇分享给大家.鸡汤有毒,但有时大家却靠它激励自己 ...

  10. Python笔记_第四篇_高阶编程_GUI编程之Tkinter_1.使用Python进行GUI编程的概述

    1. GUI概述: GUI全称为Graphical User Interface,叫做图形用户界面,也是一种交互方式(Interaction).早期计算机使用的命令行界面(command-line i ...

随机推荐

  1. python的扩展包requests的高级用法

    Python 标准库中的 urllib2 模块提供了你所需要的大多数 HTTP 功能,但是它的 API 太渣了.它是为另一个时代.另一个互联网所创建的.它需要巨量的工作,甚至包括各种方法覆盖,来完成最 ...

  2. 第一次发博,发个简单的Java程序发送手机短信验证

    最近在准备一个项目,想的登录时候用手机验证,就通过上网查阅了一下手机验证的实现方法,原来超级简单,下面将一步一步介绍. 1.去中国网建注册一个账号密码,首次注册送五条免费短信和3条免费彩信.具体的网址 ...

  3. Bagging, Boosting, Bootstrap

    Bagging 和 Boosting 都属于机器学习中的元算法(meta-algorithms).所谓元算法,简单来讲,就是将几个较弱的机器学习算法综合起来,构成一个更强的机器学习模型.这种「三个臭皮 ...

  4. 图像超分辨-IDN

    本文译自2018CVPR Fast and Accurate Single Image Super-Resolution via Information Distillation Network 代码 ...

  5. mysql进制之间的转换

    1.十进制转换成二进制 select bin(5); 2.十进制转换成八进制 select oct(5); 3.十进制转换成十六进制 select hex(5); 4.二进制转换成十进制 select ...

  6. layout 的应用

    在XAF的开发中,详细Detail 或组合DashBoard页面,需要使用 LayoutControl 进行控件排列,下面讲述如何通过写代码进行操作. 0.DevExpress 的布局控件(DevEx ...

  7. 修改Linux主机名与IP之间的映射关系

    linux主机版本: Distributor ID: UbuntuDescription: Ubuntu 14.10Release: 14.10 一.修改linux主机名 1.使用hostname命令 ...

  8. druid安装

    只要下载duridjar包,然后在web.xml配置拦截器(此处不配置监控无法显示web情况,只能看到sql情况)和servlet, 然后在spring配置文件中修改DataSource即可.

  9. 003_ab http压测工具

    一. ab -r -k -c 20000 -n 25000000 https://www.uuwatch.me/abtest #ab压测工具单机最大并发为20000,可以在多台机器上执行以增大并发 y ...

  10. css效果文字多了就...

    开发中经常会遇见这样的问题,一段文字或者一段标题过长了,就让超出长度的部分益...替换.具体怎么做的呢?直接上代码: <style> *{ margin: 0; padding: 0; } ...