鱼C论坛

 找回密码
 立即注册
查看: 926|回复: 5

[技术交流] [翻译][wxPython教学]2.wxPython的第一步

[复制链接]
发表于 2019-7-1 15:00:53 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 My_A 于 2019-7-1 15:00 编辑

第一步

安装
安装了python的鱼油们很轻松就能安装:
pip install wxPython
# 如果网速不好也可以用国内清华的镜像源
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple wxPython
安装完成后,我们将创建一些简单的示例。


简单示例
我们从一个非常简单的例子开始。我们的第一个脚本将只显示一个小窗口。
它不会有多大作用。我们将逐行分析剧本。
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
 
# simple.py

import wx

app = wx.App()

frame = wx.Frame(None, title='Simple application')
frame.Show()

app.MainLoop()

这是wxPython中的第一个示例。

1.png
#!/usr/bin/env python3
# -*- coding: utf-8 -*-

# simple.py
第一行是She-bang(玩Linux的同学对这个应该不陌生),后面是Python解释器的路径。第二行是一个神奇的注释,它指定源代码的编码。第四行是一个注释,它为脚本提供了一个名称。
import wx
这一行导入基本的wxPython模块。即core、widget、GDI、MISC和Windows。从技术上讲,wx是一个名称空间。基本模块中的所有函数和对象将以wx.前缀。下一行代码将创建一个应用程序对象。
app = wx.App()
每个wxPython程序必须有一个应用程序对象。
frame = wx.Frame(None, title='Simple application')
frame.Show()
在这里,我们创建了一个wx.Frame对象。一个wx.Frame控件是一个重要的容器部件。稍后我们将详细分析这个小部件。这个wx.Frame控件是其他控件的父控件。它本身没有parent。如果我们指定None对于parent参数,我们表示控件没有父级。它是控件层次结构中的顶级控件。在我们创建wx.Frame控件,我们必须调用Show()方法将其实际显示在屏幕上。
app.MainLoop()
最后一行进入主循环(学过windows程序设计的同学应该知道)。主循环是一个没完没了的循环。它捕获并分发应用程序生命周期中存在的所有事件。

这是一个非常简单的例子。尽管这么简单,但是我们可以用这个窗口做很多事情。我们可以调整窗口的大小,最大化,最小化。这个功能需要大量的代码。所有这些都是隐藏的,默认情况下由wxPython工具包提供,并封装了起来。没有理由重新发明轮子。


Frame
Frame控件是wxPython中最重要的控件之一。它是一个容器控件。这意味着它可以包含其他widget。实际上,它可以包含任何不是框架或对话框的窗口。wx.Frame由标题栏、边框和中央容器区域组成。标题栏和边框是可选的。他们可以被各种flage移除。

wx.Frame具有以下构造函数:
wx.Frame(wx.Window parent, int id=-1, string title='', wx.Point pos=wx.DefaultPosition, 
    wx.Size size=wx.DefaultSize, style=wx.DEFAULT_FRAME_STYLE, string name="frame")

构造函数有七个参数。第一个参数没有默认值。其他六个参数确实有。这四个参数是可选的。前三项是强制性的。

wx.DEFAULT_FRAME_STYLE是一组默认标志:wx.MINIMIZE_BOX | wx.MAXIMIZE_BOX | wx.RESIZE_BORDER | wx.SYSTEM_MENU | wx.CAPTION | wx.CLOSE_BOX | wx.CLIP_CHILDREN..其中这些常量使用位标识的方法表示,所以我们用"|"(或)操作符来控制。通过组合各种样式,我们可以更改wx.Frame控件:

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
 
# no_minimize.py

import wx

app = wx.App()
frame = wx.Frame(None, style=wx.MAXIMIZE_BOX | wx.RESIZE_BORDER
        | wx.SYSTEM_MENU | wx.CAPTION |         wx.CLOSE_BOX)
frame.Show(True)

app.MainLoop()
我们的目的是展示一个没有最小化框的窗口。因此,我们没有在样式参数中指定此标志。
2.png


大小和位置

我们可以通过两种方式指定应用程序的大小。我们在小部件的构造函数中有一个size参数,或者我们可以调用SetSize()方法。
#!/usr/bin/env python3
# -*- coding: utf-8 -*-

# set_size.py

import wx


class Example(wx.Frame):

    def __init__(self, parent, title):
        super(Example, self).__init__(parent, title=title,
            size=(350, 250))


def main():

    app = wx.App()
    ex = Example(None, title='Sizing')
    ex.Show()
    app.MainLoop()


if __name__ == '__main__':
    main()

在本例中,应用程序的大小为350x250像素。

def __init__(self, parent, title):
    super(Example, self).__init__(parent, title=title, 
        size=(350, 250))


在构造函数中,我们设置了wx.Frame小部件到350 px。小部件的高度为250 px。

同样,我们可以在屏幕上定位我们的应用程序。默认情况下,窗口放在屏幕的左上角。但是,在各种操作系统平台上,甚至在窗口管理器上,它都可能有所不同。一些窗口管理器自己放置应用程序窗口。他们中的一些人做了一些优化,这样窗口就不会重叠。程序员可以通过编程方式定位窗口。我们已经看到pos参数在wx.Frame控件的构造函数中。通过提供除默认值之外的其他值,我们可以自己控制位置。
这里有一些方法可以实现:

3.png

示例:
#!/usr/bin/env python3
# -*- coding: utf-8 -*-

# moving.py

import wx


class Example(wx.Frame):

    def __init__(self, parent, title):
        super(Example, self).__init__(parent, title=title,
            size=(300, 200))

        self.Move((800, 250))


def  main():

    app = wx.App()
    ex = Example(None, title='Moving')
    ex.Show()
    app.MainLoop()


if __name__ == '__main__':
    main()

当然,
如果我们想要使窗口最大化(全屏),我们也可以用Frame类的Maximize函数
如果我们想要是窗口居中的话,我们可以使用Frame类的Center(或Centre)函数


游客,如果您要查看本帖隐藏内容请回复

本帖被以下淘专辑推荐:

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-3-21 12:10:11 From FishC Mobile | 显示全部楼层
支持
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-8-14 14:51:59 | 显示全部楼层
嗯,这个帖子要回复看看..
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-6-25 08:46:21 | 显示全部楼层
嗯,这个帖子要回复看看.
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-6-26 06:30:01 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-6-26 14:28:59 | 显示全部楼层
好难
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-1-13 13:14

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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