热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

开源一步步实现cnblogs博客采集工具实现过滤设置对话框

报告下CnblogsFan项目最新的进度,下午wid完成了过滤设置对话框的布局设计,过滤设置暂时的设计如下:1.根据感兴趣的关键词进行采集;2.限定采集的随笔的发表时间;3.

 

报告下CnblogsFan项目最新的进度, 下午wid完成了过滤设置对话框的布局设计, 过滤设置暂时的设计如下:

  1>. 根据感兴趣的关键词进行采集;

  2>. 限定采集的随笔的发表时间;

  3>. 限定采集随笔内容的最短长度;

 

对话框的设计如下:

对话框由静态框、文本标签、文本框、单选按钮、下拉组合框、滑块以及一个"开始按钮"组成, 相关的代码如下:

#!/usr/bin/python
#
coding:utf-8
#
-------------------------------------------------------------------------------
#
Name: CnblogsFan_FilterDlg.py
#
Purpose:
#
#
Author: Mr.Wid
#
#
Created: 18-10-2012
#
Copyright: (c) Mr.Wid 2012
#
Licence: GNU GPL
#
-------------------------------------------------------------------------------import wx
import timeclass FilterDlg(wx.Dialog):def __init__( self, parent = None ):wx.Dialog.__init__(self,parent = parent,title = u'过滤设置',size = (500, 400 ))#-----感兴趣的关键词-----rect = self.GetClientRect()#--静态库框self.groupKeyWordBox = wx.StaticBox(self,label = u'关键词检索(可选)',pos = ( rect[0] + 20 , rect[1] + 20 ),size = ( rect[2] - 40, rect[0] + 100 ))#--标签提示rect = self.groupKeyWordBox.Rectself.lblKeyWord = wx.StaticText(self,label = u'感兴趣的关键词:',pos = ( rect[0] + 30, rect[1] + 30 ))#--关键词输入文本框rect = self.lblKeyWord.Rectself.txtKeyWord = wx.TextCtrl(self,size = ( 300, -1 ),pos = ( rect[0] + rect[2] + 10, rect[1] - 3 ),value = u'关键词之间用空格隔开')self.tipKeyWordValue = Trueself.txtKeyWord.Bind( wx.EVT_LEFT_DOWN, self.OnClearTipText )#--检索方式选择单选组rect = self.groupKeyWordBox.Rectself.rdoboxKeyMode = wx.RadioBox(self,choices = [ u'仅检索标题', u'全文检索' ],style = wx.RA_HORIZONTAL)self.rdoboxKeyMode.Position = (rect[0] + (rect[2] - self.rdoboxKeyMode.Rect[2]) / 2 ,rect[1] + (rect[3] - self.rdoboxKeyMode.Rect[3]) / 2 + 20)#-----时间过滤-----rect = self.groupKeyWordBox.Rectself.groupTimeBox = wx.StaticBox(self,label = u'允许采集的时间范围(可选)',pos = ( rect[0] , rect[1] + rect[3] + 20 ),size = ( rect[2], rect[0] + 50 ))#-----起始日期下拉选单#--起始年份year = []for i in range( int( time.localtime()[0]), 2002 , -1 ):year.append( str(i) )rect = self.groupTimeBox.Rectself.cboStartYear = wx.ComboBox(self,value = u'',pos = ( rect[0] + 30, rect[1] + 30 ),choices = year)#--起始月份month = []for i in range( 1, 13 ):month.append( str(i) )rect = self.cboStartYear.Rectself.cboStartMonth = wx.ComboBox(self,value = u'',pos = ( rect[0] + rect[2] + 10, rect[1] ),choices = month)#--起始天数rect = self.cboStartMonth.Rectself.cboStartDay = wx.ComboBox(self,value = u'',pos = ( rect[0] + rect[2] + 10, rect[1] ),size = ( rect[2], rect[3] ))self.cboStartMonth.Bind( wx.EVT_COMBOBOX, self.OnShowStartDay )self.cboStartYear.Bind( wx.EVT_COMBOBOX, self.OnShowStartDay )#--标签rect = self.cboStartDay.Rectwx.StaticText(self, label = u'',pos = ( rect[0] + rect[2] + 15, rect[1] + 3 ))#-----截止日期下拉选单#--结束年份year = []for i in range(int( time.localtime()[0]), 2002 , -1 ):year.append( str(i) )rect = self.groupTimeBox.Rectself.cboEndYear = wx.ComboBox(self,value = u'',pos = ( rect[0] + 240, rect[1] + 30 ),choices = year)#--结束月份month = []for i in range( 1, 13 ):month.append( str(i) )rect = self.cboEndYear.Rectself.cboEndMonth = wx.ComboBox(self,value = u'',pos = ( rect[0] + rect[2] + 10, rect[1] ),choices = month)#--结束天数rect = self.cboEndMonth.Rectself.cboEndDay = wx.ComboBox(self,value = u'',pos = ( rect[0] + rect[2] + 10, rect[1] ),size = ( rect[2], rect[3] ))self.cboEndMonth.Bind( wx.EVT_COMBOBOX, self.OnShowEndDay )self.cboEndYear.Bind( wx.EVT_COMBOBOX, self.OnShowEndDay )#-----允许采集的最短内容长度rect = self.groupTimeBox.Rectself.groupLeastBox = wx.StaticBox(self,label = u'允许采集的随笔最短字数(可选)',pos = ( rect[0] , rect[1] + rect[3] + 20 ),size = ( rect[2], rect[3] ))#--建议一个滑块rect = self.groupLeastBox.Rectself.sliderLeastWord = wx.Slider(self,value = 0,minValue = 0,maxValue = 5000,pos = ( rect[0] + 20, rect[1] + 20 ),size = ( 410, -1 ),style = wx.SL_HORIZONTAL | wx.SL_LABELS)#-----开始采集按钮-----rect = self.GetClientRect()self.btnStart = wx.Button(self,label = u'开始采集',size = ( 80, 40 ),pos = ( (rect[2] - 80 ) / 2 , rect[3] - 50 ))#-----事件响应方法------#--清空文本框提示文字def OnClearTipText( self, evt ):self.txtKeyWord.SetFocus()if self.tipKeyWordValue:self.txtKeyWord.SetValue(u'')self.tipKeyWordValue = False#--计算结束下拉选单开始日期"日"的天数def OnShowStartDay( self, evt ):try:year = int( self.cboStartYear.GetLabel() )month = self.cboStartMonth.GetLabel()except:returnday = 31while day:try:time.strptime( '%s-%s-%d'%(year, month, day ), '%Y-%m-%d')self.lstDay = [ str(i) for i in range(1, day + 1) ]self.cboStartDay.SetItems(self.lstDay)self.cboStartDay.SetLabel( u'' )breakexcept:day -= 1#--计算结束下拉选单结束日期"日"的天数def OnShowEndDay( self, evt ):try:year = int( self.cboEndYear.GetLabel() )month = self.cboEndMonth.GetLabel()except:returnday = 31while day:try:time.strptime('%s-%s-%d'%(year, month, day ), '%Y-%m-%d')self.lstDay = [ str(i) for i in range(1, day + 1) ]self.cboEndDay.SetItems(self.lstDay)self.cboEndDay.SetLabel( u'' )breakexcept:day -= 1def test():app = wx.PySimpleApp()dlg = FilterDlg()dlg.ShowModal()if __name__ == '__main__':test()

 

CnblogsFan UI部分的设计就到这了, 下一步进入各模块方法的实现阶段。

--------------

wid, 2012.10.18

 

上一篇: 开源->一步步实现cnblogs博客采集工具->实现辅助对话框

 



推荐阅读
  • 第一步:PyQt4Designer设计程序界面该部分设计类同VisvalStudio内的设计,改下各部件的objectName!设计 ... [详细]
  • 本文整理了315道Python基础题目及答案,帮助读者检验学习成果。文章介绍了学习Python的途径、Python与其他编程语言的对比、解释型和编译型编程语言的简述、Python解释器的种类和特点、位和字节的关系、以及至少5个PEP8规范。对于想要检验自己学习成果的读者,这些题目将是一个不错的选择。请注意,答案在视频中,本文不提供答案。 ... [详细]
  • 开发笔记:加密&json&StringIO模块&BytesIO模块
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了加密&json&StringIO模块&BytesIO模块相关的知识,希望对你有一定的参考价值。一、加密加密 ... [详细]
  • android listview OnItemClickListener失效原因
    最近在做listview时发现OnItemClickListener失效的问题,经过查找发现是因为button的原因。不仅listitem中存在button会影响OnItemClickListener事件的失效,还会导致单击后listview每个item的背景改变,使得item中的所有有关焦点的事件都失效。本文给出了一个范例来说明这种情况,并提供了解决方法。 ... [详细]
  • 拥抱Android Design Support Library新变化(导航视图、悬浮ActionBar)
    转载请注明明桑AndroidAndroid5.0Loollipop作为Android最重要的版本之一,为我们带来了全新的界面风格和设计语言。看起来很受欢迎࿰ ... [详细]
  • web.py开发web 第八章 Formalchemy 服务端验证方法
    本文介绍了在web.py开发中使用Formalchemy进行服务端表单数据验证的方法。以User表单为例,详细说明了对各字段的验证要求,包括必填、长度限制、唯一性等。同时介绍了如何自定义验证方法来实现验证唯一性和两个密码是否相等的功能。该文提供了相关代码示例。 ... [详细]
  • 超级简单加解密工具的方案和功能
    本文介绍了一个超级简单的加解密工具的方案和功能。该工具可以读取文件头,并根据特定长度进行加密,加密后将加密部分写入源文件。同时,该工具也支持解密操作。加密和解密过程是可逆的。本文还提到了一些相关的功能和使用方法,并给出了Python代码示例。 ... [详细]
  • 本文介绍了利用ARMA模型对平稳非白噪声序列进行建模的步骤及代码实现。首先对观察值序列进行样本自相关系数和样本偏自相关系数的计算,然后根据这些系数的性质选择适当的ARMA模型进行拟合,并估计模型中的位置参数。接着进行模型的有效性检验,如果不通过则重新选择模型再拟合,如果通过则进行模型优化。最后利用拟合模型预测序列的未来走势。文章还介绍了绘制时序图、平稳性检验、白噪声检验、确定ARMA阶数和预测未来走势的代码实现。 ... [详细]
  • 抽空写了一个ICON图标的转换程序
    抽空写了一个ICON图标的转换程序,支持png\jpe\bmp格式到ico的转换。具体的程序就在下面,如果看的人多,过两天再把思路写一下。 ... [详细]
  • 我用Tkinter制作了一个图形用户界面,有两个主按钮:“开始”和“停止”。请您就如何使用“停止”按钮终止“开始”按钮为以下代码调用的已运行功能提供建议 ... [详细]
  • python3 logging
    python3logginghttps:docs.python.org3.5librarylogging.html,先3.5是因为我当前的python版本是3.5之所 ... [详细]
  • 生成式对抗网络模型综述摘要生成式对抗网络模型(GAN)是基于深度学习的一种强大的生成模型,可以应用于计算机视觉、自然语言处理、半监督学习等重要领域。生成式对抗网络 ... [详细]
  • 带添加按钮的GridView,item的删除事件
    先上图片效果;gridView无数据时显示添加按钮,有数据时,第一格显示添加按钮,后面显示数据:布局文件:addr_manage.xml<?xmlve ... [详细]
  • 本文介绍了如何在Jquery中通过元素的样式值获取元素,并将其赋值给一个变量。提供了5种解决方案供参考。 ... [详细]
  • 本文介绍了如何通过维持两个堆来获取一个数据流中的中位数。通过使用最大堆和最小堆,分别保存数据流中较小的一半和较大的一半数值,可以保证两个堆的大小差距为1或0。如果数据流中的数量为奇数,则中位数为较大堆的最大值;如果数量为偶数,则中位数为较大堆的最大值和较小堆的最小值的平均值。可以使用优先队列来实现堆的功能。本文还提供了相应的Java代码实现。 ... [详细]
author-avatar
sijiamian_767
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有