Python 的 GUI 开发工具 原

一、flexx

github:https://github.com/flexxui/flexx

体验demo:http://demo.flexx.live/

一共四种功能,ui比较简单

聊天室,画画,走势图,估计版本还有很大升级空间,没事

Flexx 详细介绍

Flexx 是一个纯 Python 工具包,用来创建图形化界面应用程序。其使用 Web 技术进行界面的渲染。你可以用 Flexx 来创建桌面应用,同时也可以导出一个应用到独立的 HTML 文档。因为使用纯 Python 开发,所以 Flexx 是跨平台的。只需要有 Python 和浏览器就可以运行。如果是使用桌面模式运行,推荐使用 Firefox 。

Flexx 使用模块化设计,包含一些子系统:

  • ui - UI 部件
  • app - 事件循环和服务器
  • react - reactive 编程
  • pyscript - Python to JavaScript transpiler
  • webruntime - to launch a runtime

估计还是需要一些例子的讲解才能会灵活使用

二、htmlpy

官方文档(英文):https://pypi.org/project/htmlPy/

没写到python3.5是否支持

htmlPy 是对 PySide 的 QtWebKit 库的 Python 封装。可以用 HTML5 和 CSS3 来开发漂亮的图形界面应用程序。基于 Qt 构建,具备高度可定制以及跨平台支持。兼容 Python2 和 Python3.可用于任何 Python 库和环境,如 django, flask, scipy, virtualenv 等。也可以使用前端框架,如 bootstrap, jQuery, jQuery UI 等。

一个 htmlPy 基本应用包含如下三个组件:

后端:back_end.py

import htmlPy


class BackEnd(htmlPy.Object):

    def __init__(self, app):
        super(BackEnd, self).__init__()
        self.app = app

    @htmlPy.Slot()
    def say_hello_world(self):
        self.app.html = u"Hello, world"

GUI: main.py

import htmlPy
from back_end import BackEnd

app = htmlPy.AppGUI(
    title=u"Sample application")
app.maximized = True
app.template_path = "."
app.bind(BackEnd(app))

app.template = ("index.html", {})

if __name__ == "__main__":
    app.start()

前端:index.html

<html>
  <body>
    <a
    href="BackEnd.say_hello_world"
    data-bind="true">
      Click to say "Hello, world"
    </a>
  </body>
</html>

三、python包自带的GUI

Python 提供了多个图形开发界面的库,几个常用 Python GUI 库如下:

  • Tkinter: Tkinter 模块(Tk 接口)是 Python 的标准 Tk GUI 工具包的接口 .Tk 和 Tkinter 可以在大多数的 Unix 平台下使用,同样可以应用在 Windows 和 Macintosh 系统里。Tk8.0 的后续版本可以实现本地窗口风格,并良好地运行在绝大多数平台中。
  • wxPython:wxPython 是一款开源软件,是 Python 语言的一套优秀的 GUI 图形库,允许 Python 程序员很方便的创建完整的、功能健全的 GUI 用户界面。
  • Jython:Jython 程序可以和 Java 无缝集成。除了一些标准模块,Jython 使用 Java 的模块。Jython 几乎拥有标准的Python 中不依赖于 C 语言的全部模块。比如,Jython 的用户界面将使用 Swing,AWT或者 SWT。Jython 可以被动态或静态地编译成 Java 字节码。

1.Tkinter

(网上查了一下评论,说是东西都能写出来,但是很累,而且最后一次更新在2009年,虽然是标准库,但是真的很丑,所以不推荐)

Tkinter 是 Python 的标准 GUI 库。Python 使用 Tkinter 可以快速的创建 GUI 应用程序。

由于 Tkinter 是内置到 python 的安装包中、只要安装好 Python 之后就能 import Tkinter 库、而且 IDLE 也是用 Tkinter 编写而成、对于简单的图形界面 Tkinter 还是能应付自如。

注意:Python3.x 版本使用的库名为 tkinter,即首写字母 T 为小写。

import tkinter

创建一个GUI程序

  • 1、导入 Tkinter 模块
  • 2、创建控件
  • 3、指定这个控件的 master, 即这个控件属于哪一个
  • 4、告诉 GM(geometry manager) 有一个控件产生了。

实例:

#!/usr/bin/python
# -*- coding: UTF-8 -*-

import Tkinter
top = Tkinter.Tk()
# 进入消息循环
top.mainloop()

以上代码执行结果如下图:

实例2:

#!/usr/bin/python
# -*- coding: UTF-8 -*-

from Tkinter import *           # 导入 Tkinter 库
root = Tk()                     # 创建窗口对象的背景色
                                # 创建两个列表
li     = ['C','python','php','html','SQL','java']
movie  = ['CSS','jQuery','Bootstrap']
listb  = Listbox(root)          #  创建两个列表组件
listb2 = Listbox(root)
for item in li:                 # 第一个小部件插入数据
    listb.insert(0,item)

for item in movie:              # 第二个小部件插入数据
    listb2.insert(0,item)

listb.pack()                    # 将小部件放置到主窗口中
listb2.pack()
root.mainloop()                 # 进入消息循环

以上代码执行结果如下图:

2.wxPython

官方:https://www.wxpython.org/

安装:http://www.rpmfind.net/linux/rpm2html/search.php?query=wxPython

教程:http://blog.topspeedsnail.com/archives/1190

三、PyQt

PyQt实现了一个Python模块集。它有超过300类,将近6000个函数和方法。它是一个多平台的工具包,可以运行在所有主要操作系统上,包括UNIX,Windows和Mac。 PyQt采用双许可证,开发人员可以选择GPL和商业许可。在此之前,GPL的版本只能用在Unix上,从PyQt的版本4开始,GPL许可证可用于所有支持的平台。

官网:https://riverbankcomputing.com/software/pyqt/intro

PyQt教程:http://code.py40.com/category/asc6

四、kivy

kivy是一个开源的Python库,目的是快速开发GUI用户界面,特别是多点触摸应用程序。Kivy和python一样具有出色的跨平台特性,使用Kivy编写的程序可以在Windows,Linux,和mac OSX系统之间无缝切换运行,而且具有本地显示效果,特别对触摸屏应用的支持较好,在非触摸屏上也可以配合鼠标模拟触摸效果。Kivy甚至可以运行在android和IOS设备上,具有极强的跨平台能力。

官网:https://kivy.org/

中文文档1.9.1:https://www.kancloud.cn/gthank/kivydoc/127792

github:https://github.com/kivy/kivy-website/

教程1:https://www.cnblogs.com/HacTF/p/8142364.html

教程2:https://www.colabug.com/2116514.html

官网

1、安装kivy

在ubuntu 14.04下面安装kivy非常简单,基本上一条命令就可以解决,

apt-get install python-kivy

2、kivy官方网站

www.kivy.org

3、第一个demo代码

from kivy.app import App
from kivy.uix.button import Button

class TestApp(App):
    def build(self):
        return Button(text='Hello World')

TestApp().run()

这个例子比较简单。但是,我觉得不足以说明kivy的本质,充其量表明kivy可以生成一个app,app里面有一个按钮而已。

4、增强版demo

from kivy.app import App
from kivy.lang import Builder

kv = Builder.load_string('''
Button:
    text: "I was created by kv codes"
''')

class TestApp(App):
    def build(self):
        return kv

TestApp().run()

要说代表性,我觉得这个代码最能体现kivy的与众不同。因为kv数据可以用来描述app,而python代码可以用来运行app逻辑,两者配合巧妙,用来做app实在是太适合了。如果想让自己的代码运行在android上,只需要kivy+qpython打包就可以了。

5、更多示例代码

关于kivy更多的代码,大家可以用ubuntu下载,

sudo apt-get install python-kivy-examples

五、PyGTK

官网:https://pypi.org/project/PyGTK/

PyGTK+Glade可以很方便设计程序,图形界面用XML保存,然后动态解析

中文教程:https://blog.csdn.net/qq_21398167/article/details/46349061

六、PyGObject

官网:https://pypi.org/project/PyGTK/

参考文档:

1.flexx:https://www.oschina.net/p/flexx

2.htmlpy:https://www.oschina.net/p/htmlpy

3.Tkinter:http://www.runoob.com/python/python-gui-tkinter.html

4.kivy:https://www.colabug.com/2116514.html

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

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏移动开发之家

Flutter完整开发实战详解(三、 打包与填坑篇)

作为系列文章的第三篇,继篇章一和篇章二之后,本篇将为你着重展示:Flutter开发过程的打包流程、APP包对比、细节技巧与问题处理。本篇主要描述的Flutter...

1381
来自专栏進无尽的文章

扒虫篇-Bug日志 Ⅱ

事情是这样的:一个风和日丽的下午,我正在 itunesConnect 中注册一个APP,基本信息都保存了,在编辑版本信息时,都弄的差不多了,可是没有保存,结果不...

761
来自专栏施炯的IoT开发专栏

《101 Windows Phone 7 Apps》读书笔记-ALARM CLOCK

课程内容 Ø 隔离存储空间 Ø 设置 Ø 设置页面向导 Ø Toggle Switch控件 Ø 使用自定义字体     Alarm Clock模仿的...

2096
来自专栏IMWeb前端团队

可能是史上最全的weex踩坑攻略

> 这是一篇有故事的文章 --- 来自一个weex在生产环境中相爱相杀的小码畜.. ? 故事一: Build 虽然weex的口号是一次撰写 多端运行, 但其实b...

1.9K10
来自专栏码生

ReactNative 面试题

今天有一个 ReactNative 的面试。 时间紧迫,临时写了几个问题,初级面试问题。 都是关键字

8773
来自专栏移动端开发

环信SDK 头像、昵称、表情自定义和群聊设置的实现 一(附源码)

前言: 环信的SDK在公司的项目中有用到,现在用到的是群聊的部分,这里我们分析总结一下自己对环信给的DEMO大概的拆解一下,说说我们怎么样充分的利用这个de...

3628
来自专栏游戏杂谈

【hta版】获取AppStore上架后的应用版本号

之前写过一篇文章:获取AppStore上架后的应用版本号,那一篇文章使用node.js实现,存在的问题就是如果在没有安装node.js运行环境下是无法运行的,而...

1272
来自专栏熊二哥

Sublime快速入门

在当前的互联网时代,任何程序语言和相关技术都只是实现互联网应用的一种手段,这也就造成了大量的互联网工程师长期与不同的语言、技术、系统环境、IDE等打交道。因此一...

1995
来自专栏移动开发之家

Flutter完整开发实战详解(三、 打包与填坑篇)

作为系列文章的第三篇,继篇章一和篇章二之后,本篇将为你着重展示:Flutter开发过程的打包流程、APP包对比、细节技巧与问题处理。本篇主要描述的Flutter...

5983
来自专栏python学习之旅

python appium笔记(二):元素定位

#这里的示例是用android来说明的,xpath应该是通用的,resource-id不太清楚,没配过IOS的环境

2441

扫码关注云+社区

领取腾讯云代金券