0

我正在编写一个脚本,我希望它在后台运行并每 6 小时显示一次。我不想一直打开控制台,我希望 tkinter 弹出一个窗口,在该窗口中打印脚本的输出,然后我可以关闭它,这将在 6 小时内执行相同的操作。

有我的代码。

from datetime import datetime
import time
from tkinter import Tk, Label

dict_n = {}

def func():
    def check():
        today = datetime.today()
        a = str(today.day) + "/" + str(today.month)
        li_b = []
        li_c = []
        li_l = []
        li_k = []
        for i, j in dict_n.items():
            l = j.replace(" ","")[:-5]
            li_l.append(l)
            if l == a:
                c = 0b1
                li_b.append(i)
                li_c.append(c)
                li_k.append(j[-4:])
            else:
                c = 0b0
                li_c.append(c)
        k = str(today.year)
        return a, li_c, li_b, k, li_k
    date, li_bit, li_names, k, li_k = check()
    v = "Hi!"
    v += ("string " + date + "\n")
    maskb = 0b1
    d = 0
    for p in li_bit:
        if p & maskb == 0:
            d += 0
        if p & maskb != 0:
            m = int(k) - int(li_k[d])
            v += ("string" + li_b[d] + str(m))
            d += 1
    if d == 0:
        v += ("string")
    return v

def main():
    root = Tk()
    test = func()
    w = Label(root, text=test)
    w.pack()
    root.mainloop() 
    g = 1
    while g != 2:
        root = Tk()
        time.sleep(21600)
        retest = func()
        h = Label(root, text=retest)
        h.pack()
        root.mainloop()  

if __name__ == '__main__':
    main()  

问题是:只要我使用 python.exe 它就可以完美运行。但由于我不想打开控制台,我想使用 pythonw.exe。然后它不起作用。我说它不起作用的是,当我通过简单的双击从桌面执行脚本时,什么也没有发生。(与使用 python.exe 完全一样的行为相反,它每 6 小时会弹出一个窗口,并在其中打印“func”的输出)对不起大量代码,但我听说某些操作在没有控制台的情况下无法运行,我不知道哪个操作可能会出现此问题。

你能帮我找出问题吗?

卡普罗

4

1 回答 1

0

我不知道为什么您的代码“不起作用”,但我不知道您的意思是什么。但是,您肯定在代码中做了一些非常错误的事情,这应该会阻止它在任何情况下工作。无论您如何运行它,我都很难相信它是合理的。

您首先在无限循环之前调用 mainloop(因为您从未将 g 设置为 2),因此在您销毁创建的窗口之前,该循环不会运行。然后,一旦原始窗口被破坏,您就会进入一个循环,在每次迭代中调用 mainloop。同样,mainloop 在窗口被销毁之前不会退出,因此循环要求您一遍又一遍地继续销毁窗口。

Tkinter 旨在以特定方式使用,即创建 的单个实例Tk,并且只调用mainloop一次。除非您深入了解 Tkinter 的工作原理,否则其他任何事情都会给您带来一些意想不到的行为。

于 2013-07-28T16:01:29.587 回答