• wxPython 入门开发示例


    1、背景资料

    wxPython API:https://www.wxpython.org/Phoenix/docs/html/

    2、入门示例

    wxPython最重要的两个概念:App与Frame,其中App只有一个,Frame可以是多个。参见下面代码:

    import wx
    from frame_main import FrameMain
    
    
    class MainApp(wx.App):
        def __init__(self):
            wx.App.__init__(self)
            self.frame = None       # 这里声明一下self变量可以避免警告
    
        def OnInit(self):
            self.frame = FrameMain(None)
            self.frame.Show(True)
            return True             # 返回False程序将会立即退出
    
        def OnExit(self):
            self.frame = None       # 非必要,只是为了用一下self
            return 0                # 返回状态码
    
    
    if __name__ == '__main__':
        app = MainApp()
        app.MainLoop()

     Frame的设计也比较简单,涉及到多种控件的使用可以专门的研究下,我看表格控件是比较复杂一点的,不过比起C++还是简单很多。

    import wx
    
    
    class FrameMain(wx.Frame):
        def __init__(self, parent):
            wx.Frame.__init__(self, parent, id=-1, title="Hello World", size=(300, 400))    # 设置窗体
    
            # 状态栏
            bar = self.CreateStatusBar()
            self.SetStatusBar(bar)
    
            """
            panel和sizer是wxpython提供的窗口部件。是容器部件,可以用于存放其他窗口部件
            """
            panel = wx.Panel(self)
            # sizer = wx.BoxSizer(wx.VERTICAL)
            sizer = wx.GridSizer(rows=3, cols=3, vgap=5, hgap=5)    # vgap hgap代表水平距离和垂直距离
            panel.SetSizer(sizer)
    
            # 创建文本输入框
            input_text = wx.TextCtrl(panel, -1, "", pos=(10, 10), size=(150, -1))
            input_text.SetInsertionPoint(1)      # 设置焦点
            # sizer.Add(input_text)
    
            # 创建静态文本组件
            txt = wx.StaticText(panel, -1, "Hello World!", pos=(10, 50), size=(160, 25), style=wx.ALIGN_CENTER)
            txt.SetForegroundColour("blue")
            txt.SetBackgroundColour("green")
            font = wx.Font(12, wx.DEFAULT, wx.ITALIC, wx.NORMAL, True)  # ITALIC倾斜
            txt.SetFont(font)
            # sizer.Add(txt)
    
            # 按钮
            btn = wx.Button(panel, -1, "Click", pos=(10, 90), size=(80, 30))
            # sizer.Add(btn, 0, wx.TOP | wx.LEFT, 50)
            btn.Bind(wx.EVT_BUTTON, self.OnClick)
            btn.Bind(wx.EVT_ENTER_WINDOW, self.OnMouseEnter)
            btn.Bind(wx.EVT_ENTER_WINDOW, self.OnMouseEnter2)
            btn.Bind(wx.EVT_LEAVE_WINDOW, self.OnMouseLeave)
            # sizer.Add(btn)
    
            # 列表控件
            color_list = ["", "绿", "", "", ""]
            self.listBox = wx.ListBox(panel, -1, pos=(10, 130), size=(80, 110), choices=color_list, style=wx.LB_SINGLE)
            self.listBox.SetSelection(2)
            self.Bind(wx.EVT_LISTBOX, self.OnClickList, self.listBox)
            # sizer.Add(self.listBox)
    
            # 表格控件
            #
    
            self.Center()       # 将窗口放在桌面环境的中间
    
        def OnClickList(self, event):
            index = self.listBox.GetSelection()
            wx.MessageBox(self.listBox.GetString(index), "提示")
    
        def OnClick(self, event):
            # dialog = wx.Dialog(None, title="Hi, Clicked!", size=(300, 200))
            # dialog.Show()
            #self.Close(True)
    
            dialog = wx.TextEntryDialog(None, message="请输入文件名:", caption="文件", value="test")
            res = dialog.ShowModal()
            print res
    
        def OnMouseEnter(self, event):
            print "Mouse enter"
    
        def OnMouseEnter2(self, event):
            print "Mouse enter2"
            event.Skip()        # 后注册的事件响应函数会覆盖之前的,默认仅执行一个,如需继续则调用Skip
    
        def OnMouseLeave(self, event):
            print "Mouse leave"
    View Code

     直接看下效果就知道基本框架怎么用了:

  • 相关阅读:
    os模块
    sys模块
    psutil模块
    subprocess模块
    time模块
    argparse模块
    tcp端口扫描(python多线程)
    基于http的软件仓库
    SRE思想
    redis哨兵模式
  • 原文地址:https://www.cnblogs.com/kuliuheng/p/9837900.html
Copyright © 2020-2023  润新知