爱气象,爱气象家园! 

气象家园

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博登陆

只需一步, 快速开始

搜索
查看: 3492|回复: 11

[混合编程] python之GUI框架之一wxPython

[复制链接]

新浪微博达人勋

发表于 2019-10-5 23:21:28 | 显示全部楼层 |阅读模式

登录后查看更多精彩内容~

您需要 登录 才可以下载或查看,没有帐号?立即注册 新浪微博登陆

x
本帖最后由 15195775117 于 2020-6-13 17:14 编辑

因为我IDL编程已经比较熟了,所以很多东西我尽量不换其他语言来做,
但是,我也渐渐感到,一门冷门语言的资源局限性对学习、开发速度还是很有影响的,
所以我想可以双语言并行进展,IDL为专,python为博,软件开发方面,还是python比较便利,所以我决定用python做软件(包括GUI)
虽然IDL我已经做了些软件,但是综合性很是不足,IDL调用其他软件的功能,自己琢磨比较费力费时,我希望以python集成软件功能,当然,这对IDL也是很有借鉴价值的,毕竟IDL也是比较强大的,在python中玩通的路,在IDL中复制一遍是容易的。
以上,是我进行开发工作所想的捷径。
以下就开始研究python的GUI,因为之前已经有IDL和JAVA的一些经验,肯定是easy的
开始...............
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2019-10-5 23:34:27 | 显示全部楼层
常用GUI框架(=工具包)
1、wxPython
2、Kivy  (开源,跨平台,多点触控(似乎用于手机))
3、Flexx  (纯python工具包(意味着什么?),使用web技术进行界面渲染)
4、PyQt  (Qt库的python版本,跨平台)
5、Tkinter  (Tk是一个轻量级的跨平台GUI开发工具,这个是其python接口)
6、Pywin32  (微软出品,似乎过时了?)
7、PyGTK
8、pyui4win  (开源的“自绘技术”界面库)

密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

新浪微博达人勋

发表于 2019-10-6 00:31:36 来自手机 | 显示全部楼层
Python打包出来的gui的体积太大了。。
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

新浪微博达人勋

 楼主| 发表于 2019-10-6 00:41:21 | 显示全部楼层
“主事件循环”---应用软件中,主事件循环不停地重复运行,持续捕获事件并且执行


第一个pyGUI
如果系统中有不止一个窗口,需要创建wx.App子类
360截图20191006002848082.jpg
import wx
class App(wx.App):
    def OnInit(self):
        frame=wx.Frame(parent=None,title='第一个pyGUI')
        frame.Show()
        return True
if __name__ =='__main__':
    app=App()
    app.MainLoop()

如果只有一个窗口,可以不创建wx.App
360截图20191006002848082.jpg
import wx
app=wx.App()
frame=wx.Frame(None,title='单一窗口')
frame.Show()
app.MainLoop()

app.MainLoop()是启动主循环方法,没有这句,界面的操作将出现问题:
以下窗口可以移动,但缩放、关闭不行,程序最后崩了
360截图20191006002848082.jpg


密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

新浪微博达人勋

 楼主| 发表于 2019-10-6 00:43:42 | 显示全部楼层
tulalang 发表于 2019-10-6 00:31
Python打包出来的gui的体积太大了。。

是吗,高人可有成功经验分享下?什么语言做的比较小呢?
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

新浪微博达人勋

 楼主| 发表于 2019-10-6 01:05:35 | 显示全部楼层
pyGUI中,窗口=框架,应该相当于IDL的WIDGET_BASE
wx.Frame是所有框架的父类


做父子窗口的案例:
360截图20191006010335821.jpg
import wx
app=wx.App()
frame=wx.Frame(None,title='父窗口')
frame.Show()
#以frame为父窗口,顶级窗口的父窗口是None,
#id=-1会自动生成id
#pos是位置,(-1,-1)表示随便
#size表示窗口大小
#name表示窗口之名,可做搜索之用
#IDL的GUI返回值是id,python的是对象
f2=wx.Frame(frame,id=-1,title='子窗口',
            pos=(300,300),name='子窗口',
            size=(300,200))
f2.Show()
app.MainLoop()

密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

新浪微博达人勋

发表于 2019-10-6 12:10:03 | 显示全部楼层
用过PyQt和Tkinter,觉得前者在开发中量型软件的时候比较方便。
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

新浪微博达人勋

 楼主| 发表于 2019-10-6 14:41:11 | 显示全部楼层
按钮、文本、滑动条等,IDL叫“组件”,python叫“控件”
静态文本控件


360截图20191006143555929.jpg

import wx
app=wx.App()
frame=wx.Frame(None,id=-1,title='总窗口',
            pos=(300,300),name='总窗口',
            size=(350,200))
frame.Show()
#画板:
panel=wx.Panel(frame,size=(270,100))
#字体,大小26磅,斜体,加粗,下划线,微软雅黑(编码设置出问题)
font=wx.Font(26,wx.SCRIPT,wx.ITALIC,wx.BOLD,underline=True,faceName='Microsoft YaHei')#,encoding='utf-8')
text=wx.StaticText(panel,id=-1,label='书山有路勤为径\n学海无涯苦作舟',
#                   size=(100,20),
                   pos=(0,0),name='静态文本 ')
text.SetFont(font)
app.MainLoop()



密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

新浪微博达人勋

 楼主| 发表于 2019-10-6 15:18:34 | 显示全部楼层
交互式文本

360截图20191006151605268.jpg

import wx
app=wx.App()
frame=wx.Frame(None,id=-1,title='总窗口',
            pos=(300,300),name='总窗口',
            size=(400,200))
frame.Show()


#画板:
panel=wx.Panel(frame,size=(270,100))


#字体,大小26磅,斜体,加粗,下划线,微软雅黑
font=wx.Font(15,wx.SCRIPT,wx.ITALIC,wx.BOLD,underline=False,faceName='Microsoft YaHei')


text=wx.StaticText(panel,id=-1,label='输入密码:',size=(100,20),pos=(0,0),name='静态文本')


#加载字体设置:
text.SetFont(font)


#wx.TextCtrl是交互文本框


#style的使用(互斥):
#居中:style=wx.wx.TE_CENTER
#左对齐:style=wx.wx.TE_LEFT
#右对齐:style=wx.wx.TE_RIGHT
#高亮:style=wx.TE_NOHIDESEL
#密码隐藏:style=wx.TE_PASSWORD
#文本不可修改:style=wx.TE_READONLY
#回车触发时间:style=TE_PROCESS_CENTER


text=wx.TextCtrl(panel,id=-1,size=(100,50),style=wx.TE_PASSWORD,pos=(100,0),name='静态文本 ',value='初始内容')
text.SetFont(font)
app.MainLoop()


密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

新浪微博达人勋

 楼主| 发表于 2019-10-6 15:31:57 | 显示全部楼层
按钮


360截图20191006151605268.jpg


import wx
app=wx.App()
frame=wx.Frame(None,id=-1,title='总窗口',
            pos=(300,300),name='总窗口',
            size=(400,200))
frame.Show()
#画板:
panel=wx.Panel(frame,size=(270,100))
#字体,大小26磅,斜体,加粗,下划线,微软雅黑
font=wx.Font(15,wx.SCRIPT,wx.ITALIC,wx.BOLD,underline=False,faceName='Microsoft YaHei')
text=wx.StaticText(panel,id=-1,label='输入密码:',size=(100,20),pos=(0,0),name='静态文本')
#加载字体设置:
text.SetFont(font)


text=wx.TextCtrl(panel,id=-1,
                   size=(100,50),
                   style=wx.TE_PASSWORD,
                   pos=(100,0),name='静态文本 ',
                   value='初始内容')
text.SetFont(font)


#装按钮wx.Button
button=wx.Button(panel,label='确定',pos=(200,0),size=(50,50))
button.SetFont(font)


app.MainLoop()

密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册 新浪微博登陆

本版积分规则

Copyright ©2011-2014 bbs.06climate.com All Rights Reserved.  Powered by Discuz! (京ICP-10201084)

本站信息均由会员发表,不代表气象家园立场,禁止在本站发表与国家法律相抵触言论

快速回复 返回顶部 返回列表