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()
我的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()