应用程序框架

在本节中,我们将创建文件管理器的框架file_hunter,它复制了Krusader的外观,Krusader是一个在Unix系统上可用的文件管理器。如果我们双击分割器小部件,它将把file_hunter分成宽度相同的两个部分。如果我们调整主窗口的大小,也会发生同样的情况。

#file_hunter.py

#代码中图片素材,https://bugou008.lanzous.com/b00zxubqb 密码:bugou008

import wx

import os

import time

ID_BUTTON=100

ID_EXIT=200

ID_SPLITTER=300

class MyListCtrl(wx.ListCtrl):

def __init__(self, parent):

wx.ListCtrl.__init__(self, parent, style=wx.LC_REPORT)

images = ['empty.png', 'folder.png', 'py.png',

'image.png', 'pdf.png', 'up16.png']

self.InsertColumn(0, 'Name')

self.InsertColumn(1, 'Ext')

self.InsertColumn(2, 'Size', wx.LIST_FORMAT_RIGHT)

self.InsertColumn(3, 'Modified')

self.SetColumnWidth(0, 220)

self.SetColumnWidth(1, 70)

self.SetColumnWidth(2, 100)

self.SetColumnWidth(3, 420)

self.il = wx.ImageList(16, 16)

for i in images:

self.il.Add(wx.Bitmap(i))

self.SetImageList(self.il, wx.IMAGE_LIST_SMALL)

j = 1

self.InsertItem(0, '..')

self.SetItemImage(0, 5)

files = os.listdir('.')

for i in files:

(name, ext) = os.path.splitext(i)

ex = ext[1:]

size = os.path.getsize(i)

sec = os.path.getmtime(i)

self.InsertItem(j, name)

self.SetItem(j, 1, ex)

self.SetItem(j, 2, str(size) + ' B')

self.SetItem(j, 3, time.strftime('%Y-%m-%d%H:%M', time.localtime(sec)))

if os.path.isdir(i):

self.SetItemImage(j, 1)

elif ex == 'py':

self.SetItemImage(j, 2)

elif ex == 'jpg' or ex =='png':

self.SetItemImage(j, 3)

elif ex == 'pdf':

self.SetItemImage(j, 4)

else:

self.SetItemImage(j, 0)

if (j % 2) == 0:

self.SetItemBackgroundColour(j, '#e6f1f5')

j = j + 1

class Example(wx.Frame):

def __init__(self, *args, **kw):

super(Example, self).__init__(*args, **kw,size=(900, 500))

self.InitUI()

def InitUI(self):

self.splitter = wx.SplitterWindow(self, ID_SPLITTER, style=wx.SP_BORDER)

self.splitter.SetMinimumPaneSize(50)

p1 = MyListCtrl(self.splitter)

p2 = MyListCtrl(self.splitter)

self.splitter.SplitVertically(p1, p2)

self.Bind(wx.EVT_SIZE, self.OnSize)

self.Bind(wx.EVT_SPLITTER_DCLICK, self.OnDoubleClick, id=ID_SPLITTER)

filemenu= wx.Menu()

filemenu.Append(ID_EXIT, "E&xit"," Terminate the program")

editmenu = wx.Menu()

netmenu = wx.Menu()

showmenu = wx.Menu()

configmenu = wx.Menu()

helpmenu = wx.Menu()

menuBar = wx.MenuBar()

menuBar.Append(filemenu, "&File")

menuBar.Append(editmenu, "&Edit")

menuBar.Append(netmenu, "&Net")

menuBar.Append(showmenu, "&Show")

menuBar.Append(configmenu, "&Config")

menuBar.Append(helpmenu, "&Help")

self.SetMenuBar(menuBar)

self.Bind(wx.EVT_MENU, self.OnExit, id=ID_EXIT)

tb = self.CreateToolBar( wx.TB_HORIZONTAL | wx.NO_BORDER |

wx.TB_FLAT)

tb.AddTool(10, 'Previous', wx.Bitmap('previous.png'), shortHelp='Previous')

tb.AddTool(20, 'Up', wx.Bitmap('up.png'), shortHelp='Up one directory')

tb.AddTool(30, 'Home', wx.Bitmap('home.png'), shortHelp='Home')

tb.AddTool(40, 'Refresh', wx.Bitmap('refresh.png'), shortHelp='Refresh')

tb.AddSeparator()

tb.AddTool(50, 'Edit text', wx.Bitmap('edit.png'), shortHelp='Edit text')

tb.AddTool(60, 'Terminal', wx.Bitmap('terminal.png'), shortHelp='Terminal')

tb.AddSeparator()

tb.AddTool(70, 'Help', wx.Bitmap('help.png'), shortHelp='Show help')

tb.Realize()

self.sizer2 = wx.BoxSizer(wx.HORIZONTAL)

button1 = wx.Button(self, ID_BUTTON + 1, "F3 View")

button2 = wx.Button(self, ID_BUTTON + 2, "F4 Edit")

button3 = wx.Button(self, ID_BUTTON + 3, "F5 Copy")

button4 = wx.Button(self, ID_BUTTON + 4, "F6 Move")

button5 = wx.Button(self, ID_BUTTON + 5, "F7 Mkdir")

button6 = wx.Button(self, ID_BUTTON + 6, "F8 Delete")

button7 = wx.Button(self, ID_BUTTON + 7, "F9 Rename")

button8 = wx.Button(self, ID_EXIT, "F10 Quit")

self.sizer2.Add(button1, 1, wx.EXPAND)

self.sizer2.Add(button2, 1, wx.EXPAND)

self.sizer2.Add(button3, 1, wx.EXPAND)

self.sizer2.Add(button4, 1, wx.EXPAND)

self.sizer2.Add(button5, 1, wx.EXPAND)

self.sizer2.Add(button6, 1, wx.EXPAND)

self.sizer2.Add(button7, 1, wx.EXPAND)

self.sizer2.Add(button8, 1, wx.EXPAND)

self.Bind(wx.EVT_BUTTON, self.OnExit, id=ID_EXIT)

self.sizer = wx.BoxSizer(wx.VERTICAL)

self.sizer.Add(self.splitter,1,wx.EXPAND)

self.sizer.Add(self.sizer2,0,wx.EXPAND)

self.SetSizer(self.sizer)

# size = wx.DisplaySize()

# self.SetSize(size)

sb = self.CreateStatusBar()

sb.SetStatusText(os.getcwd())

self.SetTitle("File Hunter")

self.Center()

def OnExit(self, e):

self.Close(True)

def OnSize(self, e):

size = self.GetSize()

self.splitter.SetSashPosition(size.x / 2)

e.Skip()

def OnDoubleClick(self, e):

size = self.GetSize()

self.splitter.SetSashPosition(size.x / 2)

def main():

app = wx.App()

ex = Example(None)

ex.Show()

app.MainLoop()

if __name__ == '__main__':

main()

本例创建了一个双面板文件管理器的用户界面。

class MyListCtrl(wx.ListCtrl):

def __init__(self, parent):

wx.ListCtrl.__init__(self, parent, style=wx.LC_REPORT)

应用程序的主要区域被wx.ListCtrl小部件占据。

self.il = wx.ImageList(16, 16)

for i in images:

self.il.Add(wx.Bitmap(i))

self.SetImageList(self.il, wx.IMAGE_LIST_SMALL)

列表控件包含一个列表图像,用于指示文件类型。

files = os.listdir('.')

for i in files:

(name, ext) = os.path.splitext(i)

ex = ext[1:]

size = os.path.getsize(i)

sec = os.path.getmtime(i)

...

我们得到当前工作目录的内容,并确定文件的扩展名、大小和最后修改时间。

if os.path.isdir(i):

self.SetItemImage(j, 1)

elif ex == 'py':

self.SetItemImage(j, 2)

elif ex == 'jpg' or ex == 'png':

self.SetItemImage(j, 3)

elif ex == 'pdf':

self.SetItemImage(j, 4)

else:

self.SetItemImage(j, 0)

根据文件的扩展名选择文件的图像。

self.splitter = wx.SplitterWindow(self, ID_SPLITTER, style=wx.SP_BORDER)

self.splitter.SetMinimumPaneSize(50)

p1 = MyListCtrl(self.splitter)

p2 = MyListCtrl(self.splitter)

self.splitter.SplitVertically(p1, p2)

我们有两个被分割器部件垂直分割的列表控件。

menuBar = wx.MenuBar()

menuBar.Append(filemenu, "&File")

menuBar.Append(editmenu, "&Edit")

...

我们有一个menubar。

tb = self.CreateToolBar( wx.TB_HORIZONTAL | wx.NO_BORDER |

wx.TB_FLAT)

tb.AddTool(10, 'Previous', wx.Bitmap('images/previous.png'), shortHelp='Previous')

tb.AddTool(20, 'Up', wx.Bitmap('images/up.png'), shortHelp='Up one directory')

...

我们有一个toolbar.

self.sizer2 = wx.BoxSizer(wx.HORIZONTAL)

button1 = wx.Button(self, ID_BUTTON + 1, "F3 View")

button2 = wx.Button(self, ID_BUTTON + 2, "F4 Edit")

button3 = wx.Button(self, ID_BUTTON + 3, "F5 Copy")

button4 = wx.Button(self, ID_BUTTON + 4, "F6 Move")

...

八个按钮被放置在一个水平的定标器中,它被添加到窗口的底部。

wxpython开发教程_wxpython入门第十步(应用程序框架)相关推荐

  1. 《ArcGIS Engine+C#实例开发教程》第一讲桌面GIS应用程序框架的建立

    原文:<ArcGIS Engine+C#实例开发教程>第一讲桌面GIS应用程序框架的建立 摘要:本讲主要是使用MapControl.PageLayoutControl.ToolbarCon ...

  2. CTF---Web入门第十二题 程序逻辑问题

    程序逻辑问题分值:20 来源: 实验吧 难度:中 参与人数:6909人 Get Flag:1993人 答题人数:2070人 解题通过率:96% 绕过 解题链接: http://ctf5.shiyanb ...

  3. QT入门第十天 QT安装和使用alsa库和jpeg库实现音视频录制

    QT入门第十天QT安装和使用alsa库和jpeg库实现音视频录制 第一章 ALSA库的移植和使用 1.ALSA简介 2.移植ALSA (1)移植步骤 3.把移植好的库下载到开发板配置 4.使用移植好的 ...

  4. QT入门第十四天 串口通信协议+收发数据+波特率+数据位+停止位+奇偶校验+串口识别射频RFID的卡号

    QT入门第十四天 串口通信[QT入门第十四天 串口通信协议+收发数据+波特率+数据位+停止位+奇偶校验+串口识别射频RFID的卡号 第一章 常见的硬件通信接口协议 [1]硬件通信接口协议 [2]使用串 ...

  5. window.addeventlistener 不能调用方法_Java入门第十四课:如何定义”方法“

    第十四课,学习定义方法.一个对象包含三种最常见的成员:构造器.Field和方法.Field用于定义状态数据,而方法是行为特征的抽象. 那么什么是方法呢? 在Java中,方法就是用来完成解决某件事情或实 ...

  6. 2021-11-23----韩顺平Java入门第十四天

    韩顺平Java入门第十四天(排序.查找) 1.排序     1).排序的介绍:排序是将多个数据,依指定的顺序进行排列的过程.     2).内部排序:指将需要处理的所有数据都加载到内部存储器中进行排序 ...

  7. 前端简单入门第十八讲 使用jQuery实现表格的隔行换色

    还记得之前我使用JavaScript来实现表格的隔行换色效果吗?如果读者初次翻阅本文,可记得看看前端简单入门第十二讲 使用JavaScript完成后台数据展示表格的隔行换色!现在我就来使用jQuery ...

  8. 2021-11-16----韩顺平Java入门第十天

    韩顺平Java入门第十天 1.swith分支结构     基本语法     流程图     快速入门 //请编写一个程序,该程序可以接收一个字符, //比如:a,b,c,d,e,f,g a 表示星期一 ...

  9. iOS 11开发教程(八)定制iOS11应用程序图标

    iOS 11开发教程(八)定制iOS11应用程序图标 在图1.9中可以看到应用程序的图标是网状白色图像,它是iOS模拟器上的应用程序默认的图标.这个图标是可以进行改变的.以下就来实现在iOS模拟器上将 ...

最新文章

  1. swift学习笔记-----swift中的指针
  2. 【渝粤题库】国家开放大学2021春1070组织行为学题目
  3. 点云数据生成三维模型_可直接编辑的高质量3D生成模型:三维深度生成方法SDM-NET...
  4. ANDROID窗体跳转
  5. 【BZOJ3566】—概率充电器(树形+概率dp)
  6. udp文件服务器,UDP客户端服务器文件传输
  7. 分治法求一个整数序列中的最大和最小元素
  8. 一款万能企业邮箱,高效且实用,速看!
  9. html大作业【NBA篮球介绍 22个页面】学生网页设计源码
  10. 物联网计算机控制技术,远距离物联网控制系统技术,你知道几个?
  11. macfee怎么生成释放代码_批处理应用:使用FLASHGET检查Mcafee SuperDat更新
  12. BT4中文版(集成spoonwep2/spoonwpa)下载地址
  13. 需要TrustedInstaller权限才可以删除解决办法
  14. 复习330+天,我总结了一份对大多数人都适用的复习经验
  15. 《C Primer Plus第六版》第六章复习题目和编程练习题的答案
  16. 如何在CentOS上配置虚拟IP地址 (VIP)
  17. 计算机16进制A3 B9,ASCII码16进制对照表
  18. 苹果对抗FBI 自由与限制的百年难题
  19. 卷积神经网络架构不包含,卷积神经网络架构分析
  20. 英国政府资助!Wave Photonics领导光量子集成电路封装项目

热门文章

  1. rails db 查询优化_如何优化查询以解决Rails中常见的可伸缩性瓶颈
  2. aws lambda使用_如何使用AWS Lambda为发布/订阅消息选择最佳事件源
  3. 113_Power Pivot 销售订单之重复购买率及购买间隔天数相关
  4. SonarQube搭建和使用教程
  5. 当年一道python面试题的失利让我错过心仪公司,希望你不会
  6. Python分析「我们为什么这么穷」
  7. 刚接触Python,这么多IDE我该怎么选
  8. 用 Python 编写一个天气查询应用 pyqt5
  9. Mysql数据库——高级用法(视图、事务、索引、自连接、用户管理)
  10. ORC 在 Hive 中的应用