专栏首页日常撸知识Python之GUI实现

Python之GUI实现

用到了python的GUI包:wxpython

一、

wxPython是Python的GUI图形库。很方便的创建完整的、功能键全的GUI用户界面。 wxPython是作为wxWidgets的Python封装,然后作为模块的方式提供给用户的。

首先安装wxpython:

pip install wxpython

安装成功后,开始一个简单GUI之旅:

1.导入 wx 模块

2.定义应用程序类的一个对象

3.创建一个顶层窗口的 wx.Frame 类的对象。 同时给出构造标题和尺寸参数。

4.此时就可以在窗口中添加文本,文本框等各种控件了, 但是通常将一个panel对象添加到框架中,以实现布局更加容易管理

5.添加各种控件

6.通过show()方法激活框架窗口,输入应用程序对象的主事件循环,实现窗口激活显示。

示例code如下:

import wx

def changeText(event):
    text1.SetValue("hello python")
    text2.SetValue("xiaomokuaipao study wxpython")

app = wx.App()
win=wx.Frame(None,title='Xiaomokuaipao-GUI',size=(400,400))
panel = wx.Panel(win)

button1 = wx.Button(panel,label="xiaomo",pos=(100,0),size=(100,30))
button2 = wx.Button(panel,label="kuaipao",pos=(100,30),size=(100,30))

button1.Bind(wx.EVT_BUTTON,changeText)

text1=wx.TextCtrl(panel,pos=(10,60),size=(200,40))
text2=wx.TextCtrl(panel,pos=(10,100),size=(200,200),style=wx.TE_MULTILINE|wx.HSCROLL)


win.Show()
app.MainLoop()

上面code步骤如上所述,同时定义了一个改变文本框文本内容的函数,实现当点击button1的时候,调用changetext函数,向文本框中添加文字。

效果如图:

点击按钮xiaomo后:

二、

对于wxpython构建GUI,wxFormBuilder是一个可视化的界面工具非常好用,非常实用而且能够节约很多时间。

下载地址:https://sourceforge.net/projects/wxformbuilder/

下面介绍使用方法:

1.下载打开wxFormBuilder,在右侧修改项目名字,并将code generation勾选为python,如图:

2.首先点击工具栏的Froms,再点击Frame,如图:

3.点击Layout并选择一种Layout,然后就可以向Frame里添加控件了,如图:

4.下一步就可以添加许需要的控件了,分别有:Common,Additional, Data, Containers, Menu/Toolbar等几大类可以选择。

5.接下来就可以生成我们需要的python 代码了,如图:

6.将生成的代码copy我们项目中就可以直接使用了,当然也可以通过File下面保存项目和代码。

下面代码是用wxFormBuilder做了一个简单的加法和乘法的计算器GUI,并放置了一个时钟在GUI里。

# -*- coding: utf-8 -*-
import wx
import wx.xrc
import wx.py.images
import wx.lib.analogclock as ac

class MyFrame(wx.Frame):
    def __init__(self, parent):
        wx.Frame.__init__(self, parent, id=wx.ID_ANY, title='Xiaomokuaipao-GUI', pos=wx.DefaultPosition,
                          size=wx.Size(500, 500), style=wx.DEFAULT_FRAME_STYLE | wx.TAB_TRAVERSAL)


        self.SetSizeHintsSz(wx.DefaultSize, wx.DefaultSize)
        statusBar = self.CreateStatusBar()
        toolbar = self.CreateToolBar()
        toolbar.AddSimpleTool(wx.NewId(), wx.py.images.getPyBitmap(), "New", "Long help for 'New'")
        #toolbar.AddSimpleTool(wx.NewId(), wx.py.images.getPyBitmap(), "Edit", "Long help for 'Edit'")
        toolbar.Realize()

        menuBar = wx.MenuBar()

        menu1 = wx.Menu()
        menu1.Append(wx.NewId(), "&Save as", "Save file")
        menu1.Append(wx.NewId(), "&Open", "Open a new file")
        menuBar.Append(menu1, "&File")

        menu2 = wx.Menu()
        menu2.Append(wx.NewId(), "&Copy", "Copy in status bar")
        menu2.Append(wx.NewId(), "C&ut", "")
        menu2.Append(wx.NewId(), "Paste", "")
        menu2.AppendSeparator()
        menu2.Append(wx.NewId(), "&Options...", "Display Options")
        menuBar.Append(menu2, "&Edit")
        self.SetMenuBar(menuBar)


        bSizer3 = wx.BoxSizer(wx.VERTICAL)

        self.m_staticText5 = wx.StaticText(self, wx.ID_ANY, u"Input 2 number for caculate", wx.DefaultPosition, wx.DefaultSize, 0)
        self.m_staticText5.Wrap(-1)
        bSizer3.Add(self.m_staticText5, 0, wx.ALL | wx.ALIGN_CENTER_HORIZONTAL, 5)

        self.m_textCtrl3 = wx.TextCtrl(self, wx.ID_ANY, wx.EmptyString, wx.DefaultPosition, wx.DefaultSize, 0)
        bSizer3.Add(self.m_textCtrl3, 0, wx.ALL|wx.ALIGN_CENTER_HORIZONTAL, 5)

        self.m_textCtrl4 = wx.TextCtrl(self, wx.ID_ANY, wx.EmptyString, wx.DefaultPosition, wx.DefaultSize, 0)
        bSizer3.Add(self.m_textCtrl4, 0, wx.ALL|wx.ALIGN_CENTER_HORIZONTAL, 5)

        self.m_button4 = wx.Button(self, wx.ID_ANY, u"+", wx.DefaultPosition, wx.DefaultSize, 0)
        bSizer3.Add(self.m_button4, 0, wx.ALL|wx.ALIGN_CENTER_HORIZONTAL, 5)

        self.m_button5 = wx.Button(self, wx.ID_ANY, u"*", wx.DefaultPosition, wx.DefaultSize, 0)
        bSizer3.Add(self.m_button5, 0, wx.ALL|wx.ALIGN_CENTER_HORIZONTAL, 5)

        self.m_textCtrl5 = wx.TextCtrl(self, wx.ID_ANY, wx.EmptyString, wx.DefaultPosition, wx.DefaultSize, 0)
        bSizer3.Add(self.m_textCtrl5, 0, wx.ALL|wx.ALIGN_CENTER_HORIZONTAL, 5)

        c1 = ac.AnalogClock(self, pos=(20,220),size=(150, 150))

        self.SetSizer(bSizer3)
        self.Layout()

        self.Centre(wx.BOTH)

        # Connect Events
        self.m_button4.Bind(wx.EVT_BUTTON, self.pluscaculate)
        self.m_button5.Bind(wx.EVT_BUTTON, self.multiplication)

    def __del__(self):
        pass
    # Virtual event handlers, overide them in your derived class
    def pluscaculate(self, event):
        a=self.m_textCtrl3.GetValue()
        b=self.m_textCtrl4.GetValue()

        c=str(int(a)+int(b))

        self.m_textCtrl5.SetValue(c)

    def multiplication(self, event):
        a=self.m_textCtrl3.GetValue()
        b=self.m_textCtrl4.GetValue()

        c=str(int(a)*int(b))

        self.m_textCtrl5.SetValue(c)

def main():
    app = wx.App(False)
    frame = MyFrame(None)
    frame.Show(True)
    # start the applications
    app.MainLoop()


if __name__ == '__main__':
    main()

运行代码效果如图:

在文本框里输入数字,点击加号就实现数字相加,点击乘号就实现数字相乘。下图是一个乘法效果:

GUI编程并不是python强项,只是作为兴趣了解,装逼用的时候看一下manual就可以。

本文分享自微信公众号 - 小末快跑(Faster_Future),作者:小末快跑

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2019-05-23

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 置信区间构建和假设检验

    例如求总体均值的置信区间的含义:选择区间上下限是为了让总体均值介于a和b之间这一结果具有特定的概率。一般选取的置信水平为0.95。

    小末快跑
  • 用Windows自带的Task Scheduler部署一个定时任务启动一个程序

    在windows电脑或者windows server上定时运行一个程序。Windows 任务计划程序需要:具体的任务执行程序(exe,bat,批处理);而通过设...

    小末快跑
  • 串行传输和并行传输

    Bit: 比特, 二进制数字中的位,为信息量的最小单位,每个0或1就是一个位(bit)。

    小末快跑
  • python之图形界面

    在编写python GUI程序前,需要决定使用哪个GUI平台。wxpython----跨平台pythonGUI工具包

    py3study
  • python–GUI–制作简单的文本文档

    使用python的包包—wxpython,,安装命令是:apt-get install python-wxgtk2.8

    十四君
  • python中wx模块的具体使用方法

    本节介绍如何创建python程序的图形用户界面(GUI),也就是那些带有按钮和文本框的窗口。这里介绍wxPython:

    砸漏
  • Python如何用wx模块创建文本编辑器

    在GUI术语中,用户执行的动作(比如 点击按钮)叫做事件。我们需要让程序注意这些事件并且作出反应。

    砸漏
  • 七日Python之路--第三天(之不安分 wxPython)

    Python有好多个GUI框架,wxPython比较流行,so just do it..... Win下各种不爽,又换Ubuntu

    lpe234
  • 全栈开发工程师微信小程序-中(下)

    wxml用于描述页面的结构,wxss用于描述页面的样式,组件用于视图的基本组成单元.

    达达前端
  • 开发实战分享|小程序扫码获取图书信息(内附详细教程)

    接触到云函数已经有一段时间了,之前一直在看api,现在自己跟着网络上的资料和视频学习,受到豆瓣读书系列的启发,决定用云函数做一个项目,获取图书信息并存入云数据库...

    腾讯云开发TCB

扫码关注云+社区

领取腾讯云代金券