Вставьте значения цикла while в магическое окно tkinter - PullRequest
2 голосов
/ 22 апреля 2019

У меня есть код для создания «волшебного окна» в python. Он должен показывать заголовок, время и новости. Я взял новости с функцией newz для зацикливания (она должна отображать новости в окне Tkinter) Я пытался вставить его в tkinter label, но он не работает (он просто не появляется, но когда я вставляю простой текст в ярлык, он работает), как я могу это сделать? Вот весь код с функциями времени и новостями + tkinter


import tkinter as tk
from tkinter import *
import feedparser
import json
from time import sleep
import time
import os

startupscreen = tk.Tk()
startupscreen.title('Magic Mirror: Python Mod')
welcometext = tk.Label(startupscreen, font = ('caviar dreams', 40), bg='black', fg='white')
startupscreen.configure(background='black')
startupscreen.overrideredirect(True)
welcometext.config(text='日本')
welcometext.pack(side=LEFT, padx= 120, pady=80)
# Gets the requested values of the height and widht.
windowWidth = startupscreen.winfo_reqwidth()
windowHeight = startupscreen.winfo_reqheight()
# Gets both half the screen width/height and window width/height
positionRight = int(startupscreen.winfo_screenwidth()/3 - windowWidth/2)
positionDown = int(startupscreen.winfo_screenheight()/2 - windowHeight/2)

# Positions the window in the center of the page.
startupscreen.geometry("+{}+{}".format(positionRight, positionDown))
startupscreen.update()



decrypt = list()
global iteration
global timecount
global repull
global sleep
iteration = 0
timecount = 0
repull = 0
sleep = 0

# main window
while True:
    def tick(time1=''):
        time2 = time.strftime("%H")
        if time2 != time1:
            time1 = time2
            clock_frame.config(text=time2)
        clock_frame.after(200, tick)

    def tickk(time3=''):
        time4 = time.strftime(":%M:%S")
        if time4 != time3:
            time3 = time4
            clock_frame2.config(text=time4)
        clock_frame2.after(200, tickk)

    def newz():
        url = 'https://news.google.com/rss?hl=ja&gl=JP&ceid=JP:ja'
        d = feedparser.parse(url)
        news = list()

        for i, entry in enumerate(d.entries, 1):
            p = entry.published_parsed
            sortkey = "%04d%02d%02d%02d%02d%02d" % (p.tm_year, p.tm_mon, p.tm_mday, p.tm_hour, p.tm_min, p.tm_sec)

            tmp = {

                "title": entry.title,
            #"link": entry.link,

                "sortkey": sortkey
                }

            news.append(tmp)

        news = sorted(news, key=lambda x: x['sortkey'])


        myDict = {}

        for d in news:
            c = d['title']
            myDict[c] = myDict.get(c,0)+1
            frequency = myDict.keys()
        frequency = list(frequency)
        for x in range(len(frequency)):
            print (frequency[x])
            x += 1


    root = tk.Tk()
    root.title('Mirror')
    lab = Label(root, text=" 日本", font = ('', 40), bg='black', fg='white')
    lab.pack(anchor=SW, fill=X, padx=45)
    masterclock = tk.Label(root)
    masterclock.pack(anchor=NW, fill=X, padx=45)
    masterclock.configure(background='black')
    clock_frame = tk.Label(root, font = ('caviar dreams', 130), bg='black', fg='white')
    clock_frame.pack(in_=masterclock, side=LEFT)
    clock_frame2 = tk.Label(root, font = ('caviar dreams', 70), bg='black', fg='white')
    clock_frame2.pack(in_=masterclock, side=LEFT, anchor = N, ipady=15)
    newstitle = tk.Label(root, font = ('caviar dreams', 30), bg='black', fg='white')
    newstitle.pack(side=BOTTOM, anchor=W, fill=X)
    source = tk.Label(root, font = ('caviar dreams', 20), bg='black', fg='white')
    source.pack(side=BOTTOM, anchor=W, fill=X)


    tick()
    tickk()
    newz() #here it doesnt work

    root.attributes("-fullscreen", True)
    root.configure(background='black')
    startupscreen.destroy()
    root.mainloop()


1 Ответ

0 голосов
/ 22 апреля 2019

Я не знаю, что вы хотите отобразить, но вы должны использовать

    source.config(text="some text")
    root.after(1000, newz)

внутри функции newz

Как-то так

#--- newz - start ---
def newz():
    url = 'https://news.google.com/rss?hl=ja&gl=JP&ceid=JP:ja'
    d = feedparser.parse(url)
    news = list()

    for i, entry in enumerate(d.entries, 1):
        p = entry.published_parsed
        sortkey = "%04d%02d%02d%02d%02d%02d" % (p.tm_year, p.tm_mon, p.tm_mday, p.tm_hour, p.tm_min, p.tm_sec)

        tmp = {
            "title": entry.title,
        #"link": entry.link,
            "sortkey": sortkey
            }

        news.append(tmp)

    news = sorted(news, key=lambda x: x['sortkey'])

    myDict = {}

    for d in news:
        c = d['title']
        myDict[c] = myDict.get(c,0)+1
        frequency = myDict.keys()
    frequency = list(frequency)
    for x in range(len(frequency)):
        print(frequency[x])
        source.config(text=str(frequency[x]))
        x += 1

    #source.config(text="some text")
    root.after(1000, newz) # 1000ms = 1s
#--- newz - end ---
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...