专栏首页python3python入门之tkinter实现简

python入门之tkinter实现简

这次练习的题目是实现一个简单的RSS功能,需要了解的知识点:

  1. tkinter,在上一篇《简单的记事本》中已经了解了一些tkinter的用法,在这里延续了上一篇,加深一下印象。
  2. urllib,HTMLPaser库的使用,注意python3已经与python2有了很大不同。
# -*- coding:utf-8 -*-
#编码声明
 
# file: run_rss_one.py
#文件名
 
import tkinter
import urllib
import requests
from html.parser import HTMLParser
import os



#导入方法模块
class MyHtmlParser(HTMLParser):

    def __init__(self,edit):
        HTMLParser.__init__(self)
        self.edit = edit
        self.a_title = False
        self.a_text = False
    def handle_starttag(self,tag,attrs):
        if tag == 'title':
            self.a_title = True
        if tag == 'a':
            self.a_text=True
        
    def handle_endtag(self,tag):
        if tag == 'title':
            self.a_title = False
        if tag == 'a':
            self.a_text = False
    def handle_data(self,data):
        if self.a_title:
            self.edit.insert(tkinter.END,data)
        if self.a_text:
            self.edit.insert(tkinter.END,data+'\n')

这里class MyHtmlParser继承了HTMLParser,根据这个模板你可以添加你自己需要从网页上获取的内容了,假设你的网页中有标签p,试一试新增一个属性self.a_p 另外对于HTMLParser,这个了解起来可以需要费一些功夫,不过又有什么关系呢,你所浪费掉的时间总会在某个时候得到收获的,人生嘛时间不浪费在这里也会浪费在那里。

对于下面的class Window,定义了一些窗口属性,接下来在代码中我会简单记录一下它的用法。

class Window:
    def __init__(self, root):
        self.root = root     
        self.entryUrl = tkinter.Entry(root,width = 30)#Entry是输入控件
        self.entryUrl.place(x = 65, y = 15)#place定义了它放置的位置,然后如下的控件皆按照这样的方式定义好了
        #这里self.Get在这个函数中展示了输出的东西,当点击按钮时候,就会显示到文本框中
        self.get = tkinter.Button(root,
                text = '读取RSS', command = self.Get, font = ('system','10'))
        self.get.place(x = 350, y = 15)
        self.frame = tkinter.Frame(root, bd=2)
        self.scrollbar = tkinter.Scrollbar(self.frame)
        self.edit = tkinter.Text(self.frame,yscrollcommand = self.scrollbar.set,
                width = 96, height = 32)  
        self.scrollbar.config(command=self.edit.yview)
        self.edit.pack(side = tkinter.LEFT)
        self.scrollbar.pack(side=tkinter.RIGHT, fill=tkinter.Y)
        self.frame.place(y = 60)
        #用label定义一个提示输入的内容,然后把这个内容放置到输入框的下方
        self.indicate=tkinter.Label(root,text='(Please input: local path or url)',fg='red')
        self.indicate.place(x=65,y=35)
 
    def Get(self):
        url = self.entryUrl.get()
        #做一个判断如果是本地路径就获取文件名
        if os.path.isdir(url):
            #如果要循环读取目录及子目录,用os.walk
            dir=os.listdir(url) 
            #把路径下所有的文件及目录都展示在tkinter的文本框中,请回顾init中内容,self.edit本质就是一个Text阿
            for dir_n in dir:
                self.edit.insert(tkinter.END,url+ ' ' +dir_n+'\n') 
                #在这里也可以继续深入,对路径下的文件判断,比如获取文中的几行内容,抑或是对路径下的目录继续统计下去         
        else: 
            #注意python3的用法要加request
            response=urllib.request.urlopen(url)
            page = response.read()  # 读取URL内容
            hp = MyHtmlParser(self.edit) #解析html
            hp.feed(page.decode('utf-8')) #feed(),主要用于接受带html标签的str,当调用这个方法并提供相应的data时,实例开始执行
            hp.close()#结束执行close()

在这里通过HTMLPaser对解析html有了一个简单的了解,在下一篇文章中,会继续延续此文的内容,主要重点放在获取某个网站的特定内容。 所以今天你走过的路决定了你明天可以走的路,每一个障碍都要及时解决,不要轻易绕过

然后再添加上主体控制部分,就可以运行你的文件试一试了。

root = tkinter.Tk()
root.title('RSS 阅读器')
window = Window(root)
root.minsize(700,500)
root.maxsize(700,500)
root.mainloop()

新手之作,欢迎探讨一块儿学习。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Python实现系统桌面时钟

    用Python + PyQT写的一个系统桌面时钟,刚学习Python,写的比较简陋,但是基本的功能还可以。

    py3study
  • Python魔法方法指南

    什么是魔法方法呢?它们在面向对象的Python的处处皆是。它们是一些可以让你对类添加“魔法”的特殊方法。 它们经常是两个下划线包围来命名的(比如 __init_...

    py3study
  • 数据结构(二):栈

    py3study
  • matplotlib图形 嵌入 PyQt5

    只需从matplotlib.backends.backend_qt5agg.FigureCanvasQTAgg类继承一个画布控件,然后就可以当成是 PyQt5 ...

    用户6021899
  • ios 圆形进度条

    有很多开源的进度条不用,非要弄这种效果,就不吐槽了,还是想想怎么实现 废话就不多说了 直接上代码

    赵哥窟
  • Python面向对象(成员)(二)

            特点: 在声明的时候. 需要给出self, self必须放在第一个位置

    py3study
  • Selenium&PhantomJS实战二:爬取漫画

    一般来说在线看漫画的网站都会使用JavaScript来返回页面,打开百度搜索在线漫画,如下图:

    py3study
  • bs4爬虫实战三:获取电影信息并存入mysql数据库

    这次爬虫的目标网站是:http://dianying.2345.com,爬虫的搜索目标仅限于今年的电影,在网站打开搜索,在年代中选择2018

    py3study
  • 12 | Tornado源码分析:BaseIOStream 对象(上)

    hello 大家好 通过前几期我们已经聊了 Tornado 中协程的创建、运行,本期我们开始聊聊 tornado 中 网络读写数据处理相关的内容,这部分还是比较...

    还是牛6504957
  • tornado学习笔记

    tornado是默认自动开启转义的,大家可以根据需求来选是否转义,但是要知道转义的本意是来防止浏览器意外执行恶意代码的,所以去掉转义的时候需要谨慎选择

    py3study

扫码关注云+社区

领取腾讯云代金券