Tkinter RSS Feed 滚动(从左到右)

Tkinter RSS Feed scrolling (Left to Right)

我的Graduation-project-program...东西里有这段代码。

摘录:

[...]

rssfeed = tkinter.Frame(window, bg='black', width=200, height=80)
feed = feedparser.parse('http://www.repubblica.it/rss/homepage/rss2.0.xml')
feedShow = {'entries': [{feed['entries'][0]['title']}]}


class RSSDisplay(tkinter.Frame):[4]
    def __init__(self, master=None, **kw):
        tkinter.Frame.__init__(self, master=master, **kw)
        self.txtHeadline = tkinter.StringVar()
        self.headline = tkinter.Label(self, textvariable=self.txtHeadline,
                                      bg='black', fg='white', font=("arial", 20))
        self.headline.grid()
        self.headlineIndex = 0
        self.updateHeadline()

    def updateHeadline(self):
        try:
            headline = feed['entries'][self.headlineIndex]['title']
        except IndexError:
            self.headlineIndex = 0
            headline = feed['entries'][self.headlineIndex]['title']
        self.txtHeadline.set(headline)
        self.headlineIndex += 1
        self.after(10000, self.updateHeadline)

[...]

RSSDisplay(window).place(x=340, y=500)

现在显示我最喜欢的报纸(La Repubblica,我是意大利人)的标题,每 10 秒更新一次。 由于 RSSDisplay(window).place(x=340, y=500) 看起来很丑,因为文本没有居中,因为每个句子都从所述坐标开始,而不是标题中每个条目的中心,但总是在 x=340 和 y=500。 我需要它在顶部从左到右滚动,而不是突然改变。

如果这无法实现,请向我指出在什么条件下可以完成(即更改框架、GUI 或语言,即使我更愿意坚持 Python)。

如果需要更多信息,请告诉我,我会尽力添加。 谢谢大家。

Tkinter 带有不同的几何管理器,我不推荐放置这些管理器(不是很灵活..)。我不确定您希望您的布局如何。但是你可以尝试打包(除了打包还有网格):

RSSDisplay(window).pack(expand='yes', fill='x')

我建议阅读 tkinter 几何管理器的工作原理,例如这里:http://effbot.org/zone/tkinter-geometry.htm

注意:不推荐(并且会导致错误)混合使用不同的几何管理器。但是,如果您在框架内使用网格时在 window 级别上使用 pack ,它会起作用 - 就像您使用网格方法放置标签一样 - 以防万一您想稍后在框架内添加更多小部件......

这里是我的一个简单代码:我使用 tkinter.Text 小部件 (http://effbot.org/tkinterbook/text.htm)。在 tick() 中,我移动了文本小部件的 see() 功能,将新闻提要的一个字符向右推进。 当然,这可以大大改进(为了更通用的布局,您可以尝试使用 tkinter.Canvas 小部件)。

import feedparser
import tkinter as tk

feed = feedparser.parse('http://www.repubblica.it/rss/homepage/rss2.0.xml')
feedShow = {'entries': [{feed['entries'][0]['title']}]}

class RSSTicker(tk.Text):
    def __init__(self, parent, **kw):
        super().__init__(parent, height=1, wrap="none", state='disabled', **kw)
        self.headlineIndex = 0
        self.text = ''
        self.pos = 0
        self.after_idle(self.updateHeadline)
        self.after_idle(self.tick)

    def updateHeadline(self):
        try:
            self.text += '.....' + feed['entries'][self.headlineIndex]['title']
        except IndexError:
            self.headlineIndex = 0
            self.text = feed['entries'][self.headlineIndex]['title']

        self.headlineIndex += 1
        self.after(10000, self.updateHeadline)

    def tick(self):
        if self.pos < len(self.text):
        self.config(state='normal')
        self.insert('end', self.text[self.pos])
        self.pos += 1
        self.see('end')
        self.config(state='disabled')
    self.after(300, self.tick)

if __name__ == '__main__':
    root = tk.Tk()
    ticker = RSSTicker(root, bg='black', fg='white', font=("arial", 20))
    ticker.pack(side='top', fill='x')
    root.mainloop()