博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
python(9): GUI
阅读量:4840 次
发布时间:2019-06-11

本文共 2355 字,大约阅读时间需要 7 分钟。

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

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

上述程序也可以改写为: 

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

 

转载于:https://www.cnblogs.com/xuying-fall/p/10033885.html

你可能感兴趣的文章
内核开发基础3——Linux内核配置与编译
查看>>
计算机组成原理复习
查看>>
BUPT复试专题—中序遍历序列(2013)
查看>>
【常见Web应用安全问题】---7、CRLF injection
查看>>
php7.2.1 安装
查看>>
用winrar解压时提示无法设置安全数据 拒绝访问的解决方法
查看>>
诡异的数学,数字问题 - leetcode
查看>>
交换输出
查看>>
设计模式-策略模式&状态模式&访问者模式
查看>>
python学习第三十三节(IO模型)
查看>>
linux pci 驱动小结
查看>>
BZOJ2744: [HEOI2012]朋友圈
查看>>
设计模式之抽象工厂模式
查看>>
大整数相关的几道题
查看>>
利用表格实现大图轮播
查看>>
SpringBoot集成jsp
查看>>
HTML+CSS 内容居中效果
查看>>
关于对话框
查看>>
Jmeter-元件的作用域和执行顺序
查看>>
ArrayList集合
查看>>