Python 3.7 wxPython 文件对话框应用(opne,save)

今天主要完善昨天简单UI窗体的上面的事件,文件打开,文件保存,窗口关闭三个事件。
需要准备的内容为:

  • 引用 import os
  • 定义三个事件(fileopen,savefile,closeWindows)
  • 绑定事件
  • 简单设置了一下文本框的背景
  • 重点介绍一下,FileDialog

1)引用 import os

import os
主要使用它的os.getcwd()方法;查了一下这个方法是
getcwd()函数:取得当前的工作目录(working directory)
将当前工作目录赋给,FileDialogs对话框。

2)定义三个事件

def OnfileOpen(event):
def onsavefile(event):
def closeWindows(event):#定义关闭窗口事件

这里对于命名方法,需要重新学习一下,一般是使用动词+名词,第一个文件打开典型中国程序员,哈哈;

3)绑定事件

open_button = wx.Button(panel,label = "打开")
open_button.Bind(wx.EVT_BUTTON,OnfileOpen) # 绑定打开文件事件到open_button按钮上
save_button = wx.Button(panel,label = "保存")
save_button.Bind(wx.EVT_BUTTON,onsavefile)
close_button =wx.Button(panel,label ='Close') #增加关闭按钮;
close_button.Bind(wx.EVT_BUTTON,closeWindows) #绑定关闭事件

4)设置文本框的背景,by the way

content_text.SetBackgroundColour("While")

5)重点介绍一下,FileDialog

file_wildcard的介绍,大家一看应该是知道是windows的特点,需要默认打开文件扩展名。

style 是一个关键参数从官方的内容里面有以下几个:


style
        '''
        打开开文件对话框
        '''
        file_wildcard = "TXT files(*.txt)|*.txt|All files(*.*)|*.*"
        dlg = wx.FileDialog(frame, "Open file file...",
                            os.getcwd(),
                            style =wx.FD_OPEN,
                            wildcard = file_wildcard)
        #print(dlg.GetPath())
        if dlg.ShowModal() == wx.ID_OK:
            path = dlg.GetPath()
            path_text.SetValue(path)
            content_text.SetBackgroundColour("While")
            #print(path)
            #path = path_text.GetValue()
            with open(path,"r",encoding="utf-8") as f:  # encoding参数是为了在打开文件时将编码转为utf8
                content_text.SetValue(f.read())

        dlg.Destroy()

最后丢出所有代码,这些代码可以运行于win7,python3.7以上的系统

#coding:utf-8
import wx
import os

import datetime


def OnfileOpen(event):
        '''
        打开开文件对话框
        '''
        file_wildcard = "TXT files(*.txt)|*.txt|All files(*.*)|*.*"
        dlg = wx.FileDialog(frame, "Open file file...",
                            os.getcwd(),
                            style =wx.FD_OPEN,
                            wildcard = file_wildcard)
        #print(dlg.GetPath())
        if dlg.ShowModal() == wx.ID_OK:
            path = dlg.GetPath()
            path_text.SetValue(path)
            content_text.SetBackgroundColour("While")
            #print(path)
            #path = path_text.GetValue()
            with open(path,"r",encoding="utf-8") as f:  # encoding参数是为了在打开文件时将编码转为utf8
                content_text.SetValue(f.read())

        dlg.Destroy()

def onsavefile(event):
    '''
    文件保存
    :param event: 
    :return: 
    '''
    file_wildcard = "TXT files(*.txt)|*.txt|All files(*.*)|*.*"
    dlg = wx.FileDialog(frame, "Open file file...",
                        os.getcwd(),
                        style =wx.FD_SAVE,
                        wildcard = file_wildcard)
    if dlg.ShowModal() == wx.ID_OK:
        path =dlg.Path
        content_text.SaveFile(path)

    dlg.Destroy()


def closeWindows(event):#定义关闭窗口事件
    frame.Close()

def OnPaintMotion( event):

        #设置状态栏1内容
        print(str(event.GetPosition()))
        str1= str(event.GetPosition())

        statusbar.SetStatusText("鼠标位置:" +str1 , 0)

        nowdate = datetime.datetime.now().strftime('%Y-%m-%d')
        nowtime = datetime.datetime.now().strftime('%H:%M:%S')
        #设置状态栏2内容
        statusbar.SetStatusText("当前日期:"+nowdate,1)

        #设置状态栏3内容
        statusbar.SetStatusText("当前时间:"+nowtime , 2)

        event.Skip()


app = wx.App()

frame = wx.Frame(None,title = "Gui Test Editor",pos = (1000,200),size = (800,400))

panel = wx.Panel(frame)

path_text = wx.TextCtrl(panel)
open_button = wx.Button(panel,label = "打开")
open_button.Bind(wx.EVT_BUTTON,OnfileOpen)    # 绑定打开文件事件到open_button按钮上
save_button = wx.Button(panel,label = "保存")
save_button.Bind(wx.EVT_BUTTON,onsavefile)

close_button =wx.Button(panel,label ='Close')  #增加关闭按钮;
close_button.Bind(wx.EVT_BUTTON,closeWindows)  #绑定关闭事件
content_text= wx.TextCtrl(panel,style = wx.TE_MULTILINE)
#  wx.TE_MULTILINE可以实现以滚动条方式多行显示文本,若不加此功能文本文档显示为一行




box = wx.BoxSizer() # 不带参数表示默认实例化一个水平尺寸器
box.Add(path_text,proportion = 10,flag = wx.EXPAND|wx.ALL,border = 3) # 添加组件
    #proportion:相对比例
    #flag:填充的样式和方向,wx.EXPAND为完整填充,wx.ALL为填充的方向
    #border:边框
box.Add(open_button,proportion = 2,flag = wx.EXPAND|wx.ALL,border = 3) # 添加组件
box.Add(save_button,proportion = 2,flag = wx.EXPAND|wx.ALL,border = 3) # 添加组件
box.Add(close_button,proportion = 2,flag = wx.EXPAND|wx.ALL,border = 3) # 添加组件

v_box = wx.BoxSizer(wx.VERTICAL) # wx.VERTICAL参数表示实例化一个垂直尺寸器

v_box.Add(box,proportion = 1,flag = wx.EXPAND|wx.ALL,border = 3) # 添加组件
v_box.Add(content_text,proportion = 5,flag = wx.EXPAND|wx.ALL,border = 3) # 添加组件
panel.SetSizer(v_box) # 设置主尺寸器

#增加状态栏
statusbar = frame.CreateStatusBar()
statusbar.SetFieldsCount(3)
statusbar.SetStatusWidths([-1,-2,-3])
statusbar.SetStatusText("Welcome to Wxpyon",0)
statusbar.SetStatusText("Welcome to Wxpyon,X:",1)
statusbar.SetStatusText("Welcome to Wxpyon,Y:",2)

path_text.Bind(wx.EVT_MOTION,OnPaintMotion)
panel.Bind(wx.EVT_MOTION,OnPaintMotion)
content_text.Bind(wx.EVT_MOTION,OnPaintMotion)

frame.Show()
app.MainLoop()

Python 3.7初学者,欢迎交流!求推荐命名规范及其他学习材料;
我好像离自动点赞,还有点远。
争取下周搞定简书,自动给朋友点赞的功能 。

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Sample1,创建一个窗体控件: import wx //导入wxPython库class Frame(wx....
    皮皮木子阅读 9,766评论 0 50
  • 可以看我的博客 lmwen.top 或者订阅我的公众号 简介因为公司项目的原因,最近花了点时间去研究NLP自然...
    ayuLiao阅读 9,067评论 0 3
  • wxPython简介 wxPython是一个用于创建桌面GUI应用程序的跨平台工具包。wxPython的主要作者是...
    Mc天未亮心微凉阅读 27,255评论 0 13
  • 学习之前需要了解几个内容: 1.python目前的地位 目前看python的主要方向是取代php以及java在we...
    任嘉平生愿阅读 2,224评论 0 0
  • 一,wxPython简介 WxPython基于Python语言实现,封装了优秀的跨平台GUI库wxWidgets(...
    还是晕船阅读 5,040评论 0 2

友情链接更多精彩内容