Tkinter RSS Feed прокрутки (слева направо) - PullRequest
0 голосов
/ 03 декабря 2018

У меня есть этот фрагмент кода в моей программе Graduation-project ... вещь.

Извлечение:

[...]

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.Мне нужно, чтобы он прокручивался сверху слева направо, а не резко менялся.

Если это не достижимо, укажите мне, при каких условиях это можно сделать (например, изменение Framework, GUI).или язык, даже если бы я предпочел придерживаться Python).

Если вам нужна дополнительная информация, пожалуйста, сообщите мне, и я постараюсь добавить ее.Спасибо всем.

Ответы [ 2 ]

0 голосов
/ 03 декабря 2018

Здесь я возьму простой тикер: я использую виджет 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()
0 голосов
/ 03 декабря 2018

Tkinter поставляется с различными менеджерами геометрии, которые я не рекомендую размещать (не очень гибкие ..).Я не совсем уверен, как вы хотите, чтобы ваш макет был похож.Но вы можете попробовать пакет (кроме пакета есть еще и сетка):

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

Рекомендую прочитать о том, как работают менеджеры геометрии tkinter, например, здесь: http://effbot.org/zone/tkinter-geometry.htm

Примечание: этоНе рекомендуется (и приводит к ошибкам) ​​смешивать разные менеджеры геометрии.Но это работает, если вы используете pack на уровне окна, когда используете grid внутри вашего фрейма - как вы делаете это для размещения метки с помощью метода grid - на тот случай, если вы захотите добавить больше виджетов позже в ваш фрейм ...

...