Python GUI
个人感觉,如果是商业项目,还是原生系统支持的方案较好。
macOS用swift;成熟的应用多得是,而且官方支持也多。
Windows用dotnet wpf、duilib、qt等等;win下的gui,哎,算了。
Linux上常见的gui也就gtk、qt、wxwidgets,gtk和qt分别被gnome和kde支持,写Linux应用没啥问题,考虑跨平台的话gtk和wxwidgets虽说是支持跨平台,但是win和macos平台上成熟的应用日常很难见到。对比qt与gtk,都支持Python开发,这一点很好,c和c++真的是门槛高。个人更倾向于qt for python,起码支持很多。gtk如果只是用默认的控件的话也没问题,但是涉及到自定义就麻烦了,没有第三方库可以直接用。
wxPython
官网 https://wxpython.org/
wxWidgets官网(原版c++) https://www.wxwidgets.org/
wxpythonWiki https://wiki.wxpython.org/FrontPage 内容比较全面
wxWidgets(原版c++) 论坛 https://forums.wxwidgets.org/index.php?sid=6384839ec4335470979d7ca1161c42e0
Hello World https://wxpython.org/pages/overview/#hello-world
Getting Started https://wiki.wxpython.org/Getting Started
http://thisis.yorven.site/blog/index.php/2017/09/16/wxpython-jiaocheng-er-kaishibianxie/
中文教程 https://wizardforcel.gitbooks.io/wxwidgets-book/content/0.html
macOS环境搭建(版本4.1)
pip安装即可,
然后创建文件:
# First things, first. Import the wxPython package.
import wx
# Next, create an application object.
app = wx.App()
# Then a frame.
frm = wx.Frame(None, title="Hello 这里是feipeng8848")
# Show it.
frm.Show()
# Start the event loop.
app.MainLoop()
import wx
class Example(wx.Frame):
def __init__(self, *args, **kw):
super(Example, self).__init__(*args, **kw)
self.InitUI()
def InitUI(self):
pnl = wx.Panel(self)
button = wx.Button(pnl, label='Button', pos=(20, 20))
text = wx.CheckBox(pnl, label='CheckBox', pos=(20, 90))
combo = wx.ComboBox(pnl, pos=(120, 22), choices=['Python', 'Ruby'])
slider = wx.Slider(pnl, 5, 6, 1, 10, (120, 90), (110, -1))
pnl.Bind(wx.EVT_ENTER_WINDOW, self.OnWidgetEnter)
button.Bind(wx.EVT_ENTER_WINDOW, self.OnWidgetEnter)
text.Bind(wx.EVT_ENTER_WINDOW, self.OnWidgetEnter)
combo.Bind(wx.EVT_ENTER_WINDOW, self.OnWidgetEnter)
slider.Bind(wx.EVT_ENTER_WINDOW, self.OnWidgetEnter)
self.sb = self.CreateStatusBar()
self.SetSize((250, 230))
self.SetTitle('wx.Statusbar')
self.Centre()
self.Show(True)
def OnWidgetEnter(self, e):
name = e.GetEventObject().GetClassName()
self.sb.SetStatusText(name + ' widget')
e.Skip()
def main():
ex = wx.App()
Example(None)
ex.MainLoop()
if __name__ == '__main__':
main()
windows 环境
首先我尝试了pip安装 (如果下载速度太慢可能需要换源 https://www.cnblogs.com/feipeng8848/p/12809760.html)
安装成功了,但是无法在vscode或者pycharm中导入,提示找不到wx包。
后来在pycharm中
还用上面的代码 debug一下
声明式UI
wxwidgets是支持声明式UI的,在xml中定义UI元素,代码中加载xml文件。http://wxglade.sourceforge.net/
这里是一些设计工具
https://docs.wxwidgets.org/3.0/overview_xrc.html
https://github.com/wxFormBuilder/wxFormBuilder
https://github.com/wxFormBuilder/wxFormBuilder 这个还是更新非常及时的,最新的是代码提交也是最近的:
使用方法 https://wiki.wxpython.org/XRCTutorial
wxFormBulider创建一个UI
复制下面的xml内容到python工程目录下,新建个文件
这里我保存成ui.xrc
使用下面的代码
import wx
from wx import xrc
class MyApp(wx.App):
def OnInit(self):
self.res = xrc.XmlResource('ui.xrc')
self.init_frame()
return True
def init_frame(self):
self.frame = self.res.LoadFrame(None, 'mainFrame')
self.frame.Show()
if __name__ == '__main__':
app = MyApp(False)
app.MainLoop()
去掉标题栏
pygtk/pyobject
首先一点,pygobject目前为止是LGPLv2.1+协议,也就是说我们可以引用pygobject开发软件只要不修改pygobject的源代码就可以把我们的软件闭源并销售。
pyobject官网 https://pygobject.readthedocs.io/en/latest/
pygtk+3 官网 https://python-gtk-3-tutorial.readthedocs.io/en/latest/
https://python-gtk-3-tutorial.readthedocs.io/en/latest/introduction.html#simple-example
与pygtk不同,pygobject封装了GObject、gtk、GStreamer、WebKitGTK、GLib、GIO。而pygtk只封装了gtk,且pgtk只支持到python2。
我们熟悉的gnome-tweak-tool
就是用pygobject写的。好像也就这个比较出名了。
使用glade(UI ide)创建UI声明文件 https://python-gtk-3-tutorial.readthedocs.io/en/latest/builder.html
资料 https://zhuanlan.zhihu.com/p/52809594
环境搭建
https://pygobject.readthedocs.io/en/latest/getting_started.html
尝试了官方指导在Windows和macOS上都没有成功,后来查了下gtk在Windows上问题很多。
如果想用gtk,只在Linux上还是可以的,其他系统就不用考虑了。
qt for python
官网 https://www.qt.io/qt-for-python
文档 https://doc.qt.io/qtforpython/tutorials/index.html
多数应用是需要GPL协议的,也就是说需要开放源代码,LGPL太少了。
相关文章
- Python 中使用 jsonpath
- Python中python-nmap模块的使用
- 为什么说Python是一门动态语言--Python的魅力
- How to run python interactive in current file's directory in Visual Studio Code? Python路径问题
- 零基础教你快速入门Python怎么学python入门?python新手学习路线
- Python初学者如何系统的学习python————Python入门学习指南--内附学习路径
- Python学到什么程度可以找个兼职呢?
- python零基础数据分析入门
- python之进程和线程的对比
- 每天一个python小知识——如何在Python 3中转换数据类型
- 【python实战】拒绝黄牛!我要用python原价冲周董演唱会~Python自动秒杀抢票脚本
- Python集合(set)的操作方法汇总(约20种操作方法),并附示例代码
- net-snmp启用python模块
- 【Python】【PyPI】twine模块打包python项目上传pypi
- 【Python】+Django框架使用
- Python GUI 设计(三)---Widget组件详解
- Python GUI 设计(一)———Tkinter窗口创建、组件布局
- Python自动操作 GUI 神器——PyAutoGUI
- python 关于GUI的思考(转)
- 《Python算法教程》——2.7 练习题
- 基于Python + SQL server 实现(GUI)原神圣遗物管理与角色数值模拟系统【100010759】
- Python 中的生成器实现原理
- 《Python语言程序设计》——3.8 绘制带颜色和字体的图形
- Python将Excel生成SHP
- Python 基础 之 Ubuntu 上安装 python 和 python-pip
- 使用python做一个爬虫GUI程序
- 【Linux学习笔记】解决:yum install python-dev 报错(CentOS安装Python-dev库)