zoukankan      html  css  js  c++  java
  • python(9): GUI

    实例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()
    ----END---- HAVE A GOOD ONE! 以上为本人课余自学工具书/blog的笔记整理, 常有更新, 非100%原创!且读且学习。
  • 相关阅读:
    ionic3打包打包安卓apk详细过程以及遇到的问题
    webpack+vue解决前端跨域问题
    在ionic3+angular4项目中添加自定义图标
    十. 图形界面(GUI)设计13.鼠标事件
    十. 图形界面(GUI)设计13.鼠标事件
    十. 图形界面(GUI)设计12.滚动条
    十. 图形界面(GUI)设计11.对话框
    十. 图形界面(GUI)设计10.菜单
    十. 图形界面(GUI)设计9.列表和组合框
    十. 图形界面(GUI)设计8.选择框和单选按钮
  • 原文地址:https://www.cnblogs.com/xuying-fall/p/10033885.html
Copyright © 2011-2022 走看看