一些WxPython的使用方法(3)

chapter 14

#coding=gbk
'''
Created on 2018年11月21日

@author: Administrator
'''
import wx 
import os
# WxPython 中的菜单, 窗口和对话框控件



#窗口, MDI 窗口,多文档窗口,由多个窗口或其他组件组成
def test_mdiframe():
    class MDIframe(wx.MDIParentFrame):
        def __init__(self):
            wx.MDIParentFrame.__init__(self, None, -1, u'MDI', size=(300, 300))
            menubar = wx.MenuBar()  # 添加菜单栏
            self.SetMenuBar(menubar)
            
            menu = wx.Menu()
            menu.Append(100, u'新建')
            menu.Append(101, u'退出')
            
            menubar.Append(menu, u'文件')
            self.Bind(wx.EVT_MENU, self.OnNewWindow, id=100)    #绑定菜单栏的事件
            self.Bind(wx.EVT_MENU, self.OnExit, id=101)
            
        def OnExit(self, event):
            self.Close(True)
        def OnNewWindow(self, event):
            win = wx.MDIChildFrame(self, -1, u'子窗口')    #创建子窗口
            win.Show(True)
        
    app = wx.App()
    frame = MDIframe()
    frame.Show()
    app.MainLoop()
    
# test_mdiframe()

#1,对话框:分为模态对话框,提示对话框,文本对话框,打开文件对话框,对话框都是继承与 wx.Dialog 类
#对话框与Frame 类似,不同的是对话框表示一次信息交换的过程,需要最后关闭
# 使用Show() 方法显示的对话框为非模态对话框,使用ShowModal() 方法的是模态对话框,用户必须关闭对话框之后,才能对主程序窗口进行操作
#提示对话框
def test_dialog():
    class MyFrame(wx.Frame):
        def __init__(self):
            wx.Frame.__init__(self, None, -1, u'自定义对话框', size=(300, 150))  # 这里自定义 parent 为  None
            MenuHelp = wx.Menu()            #创建菜单
            MenuShow = wx.Menu()
            
            aboutMenu = MenuHelp.Append(-1, u'关于')
            MenuShow.Append(100, u'文件')     # 在 帮助 栏,增加子栏
            MenuShow.Append(101, u'退出')
            
            menuBar = wx.MenuBar()      #添加菜单栏
            menuBar.Append(MenuHelp, u'帮助') # 把菜单添加到 菜单栏中
            menuBar.Append(MenuShow, u'显示')
            
            self.Bind(wx.EVT_TOOL, self.ShowAboutDlg, aboutMenu)
            self.Bind(wx.EVT_MENU, self.OnHello, id=100)  #id 为菜单编号
            self.Bind(wx.EVT_MENU, self.OnExit, id=101)
            
            button = wx.Button(self, wx.ID_OK, u'离开', pos=(5, 5), size=(5, 5))    #设置一个按钮
            button.SetDefault()
            self.Bind(wx.EVT_BUTTON, self.Click, button)
            
            
            self.SetMenuBar(menuBar)
        
        def ShowAboutDlg(self, event):    
            pos = self.GetPosition()
            dialog = MyDialog(self, -1, u'&m关于')
            dialog.SetPosition((pos[0] + 100, pos[1] + 60))
            
        def OnHello(self, event):
            wx.MessageBox(u'你好', u'提示')
            
        def OnExit(self, event):
            self.Close(True)
            
        def Click(self, event):
            dlg = wx.MessageDialog(None, u'是否退出',u'退出 ', wx.YES_NO | wx.ICON_QUESTION)  #创建对话框
            if dlg.ShowModal() == wx.ID_YES:    #判断用户的选择
                frame.Close()
            dlg.Destroy()
            
            
            
    class MyDialog(wx.Dialog):
        def __init__(self, parent, id, title):
            wx.Dialog.__init__(self, parent, id, title, size=(100, 100))
            self.panel = wx.Panel(self)
            self.OKBtn = wx.Button(self, 10, u'确定', pos=(10, 20), size=(80, 30))
            
            self.Bind(wx.EVT_BUTTON, self.CloseDlg, self.OKBtn)
            self.Show()
            
        def CloseDlg(self, event):
            self.Close()
            
    app =  wx.App()
    frame = MyFrame()
    frame.Show()
    app.MainLoop()
# test_dialog()

#文本输入对话框
def test_text_dialog():
    class MyFrame(wx.Frame):
        def __init__(self):
            wx.MDIParentFrame.__init__(self, None, -1, u'text', size=(300, 300))
            panel = wx.Panel(self, -1)
            self.textCtrl = wx.TextCtrl(panel, -1, '', pos=(10, 10),size=(60, 30), style=wx.TE_PROCESS_ENTER)
            self.textCtrl.Bind(wx.EVT_TEXT_ENTER, self.OnClick, self.textCtrl)  #按 enter 键
            
        def OnClick(self, event):
            self.dialog = wx.TextEntryDialog(None, u'输入文本', u'文本对话框', '', style=wx.OK | wx.CANCEL)
            if self.dialog.ShowModal() == wx.ID_OK:
                self.textCtrl.SetLabel(self.dialog.GetValue())   #在 文本框中打印出 输入的字符串
        
        
        
    app = wx.App()
    frame = MyFrame()
    frame.Show()
    app.MainLoop()
    
# test_text_dialog()
def ShowFileDialog():    
            filterFile = 'Python source(*.py) | *.py | all files (*.*) |*.*'    #过滤的文件,选择.py 格式的数据
            dialog = wx.FileDialog(None, u'选择文件', os.getcwd(), '', filterFile, wx.FLP_OPEN) #获取当前文件的路径
            dialog.ShowModal()
            dialog.Destroy()
app = wx.App()    
# ShowFileDialog()

#窗口与对话框交互, 通过2 个方法: TransferToWindow(), TransferFromWindow
# 计算 输入的 2 个值 的和
def test_add_dialog():
    class MyFrame(wx.Frame):
        def __init__(self):
            wx.Frame.__init__(self, None, -1, u'text', size=(300, 300))
            panel = wx.Panel(self, -1)
            sizer = wx.BoxSizer(wx.HORIZONTAL)
            self.addTextCtrl1 = wx.TextCtrl(panel, -1, '', pos=(10, 10))    #定义文本与按钮
            add = wx.StaticText(panel, -1, '+')
            self.addTextCtrl2 = wx.TextCtrl(panel, -1, '')
            self.result = wx.TextCtrl(panel, -1, '', pos=(40, 50))
            btn = wx.Button(panel, -1, u'计算')
            
            btn.Bind(wx.EVT_BUTTON, self.OnClick, btn)
            sizer.Add(self.addTextCtrl1)
            sizer.Add(add)
            sizer.Add(self.addTextCtrl2)
            sizer.Add(btn)
            panel.SetSizer(sizer)
            panel.Fit()
            
        def OnClick(self, event):
            data = {0: self.addTextCtrl1.GetValue(), 1: self.addTextCtrl2.GetValue()}   #将数据存放到字典中
            #方法 1
#             result = float(data[0]) + float(data[1])    #需要先转换成  float 型 
#             result = str(result)    # 还需要将其 转换成字符串输出
#             self.result.SetLabel(result)
            dlg = MyDialog(data)
            dlg.ShowModal()
            dlg.Destroy()
    
    class MyDialog(wx.Dialog):
        def __init__(self, data):
            wx.Dialog.__init__(self, None, id=-1, title=u'验证器', size=(100, 100))
            addStaticText = wx.StaticText(self, -1, u'数字1')
            addStaticText2 = wx.StaticText(self, -1, u'数字2')
            self.addTextCtrl = wx.TextCtrl(self, validator = DataValidator(data, 0))
            self.addTextCtrl2 = wx.TextCtrl(self, validator = DataValidator(data, 1))
            
            btn = wx.Button(self, wx.ID_OK, u'确定')
            self.Bind(wx.EVT_BUTTON, self.OnClick, btn)
            btn.SetDefault()
            
            sizer = wx.BoxSizer(wx.VERTICAL)
            gridsizer = wx.FlexGridSizer(2, 2, 5, 5)
            gridsizer.Add(addStaticText, 0, wx.ALIGN_LEFT)
            gridsizer.Add(self.addTextCtrl, 0, wx.EXPAND)
            gridsizer.Add(addStaticText2, 0, wx.ALIGN_LEFT)
            gridsizer.Add(self.addTextCtrl2, 0, wx.EXPAND)
            
            sizer.Add(gridsizer, 0, wx.EXPAND | wx.ALL, 5)
            sizer.Add(btn, 0, 5)
            self.SetSizer(sizer)
            sizer.Fit(self)
            
        def OnClick(self, event):
            result = float(self.addTextCtrl.GetValue()) + float(self.addTextCtrl2.GetValue())
            dlg = wx.MessageBox(str(result), u'结果')
            self.Close()
     
    class DataValidator(wx.PyValidator):       
        def __init__(self, data, key):
            wx.PyValidator.__init__(self)
            self.data = data 
            self.key = key
        
        def Clone(self):
            return DataValidator(self.data, self.key)
        
        def Validate(self, w):
            return True
        
        def TransferToWindow(self):
            textCtrl = self.GetWindow()
            textCtrl.SetValue(self.data.get(self.key, ''))
            return True
        
        def TransferFromWindow(self):
            return True
         
    app = wx.App()
    frame = MyFrame()
    frame.Show()
    app.MainLoop()
    
# test_add_dialog()

 

项目推荐:

2000多G的计算机各行业电子资源分享(持续更新)

2020年微信小程序全栈项目之喵喵交友【附课件和源码】

Spring Boot开发小而美的个人博客【附课件和源码】

Java微服务实战296集大型视频-谷粒商城【附代码和课件】

Java开发微服务畅购商城实战【全357集大项目】-附代码和课件

最全最详细数据结构与算法视频-【附课件和源码】

在这里插入图片描述

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值