代码适用于python而不适用于pythonw

时间:2013-07-28 15:50:14

标签: tkinter pythonw

我正在编写一个脚本,我希望它能够在后台运行并每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”) 很抱歉有大量代码,但我听说有些操作没有控制台就无法运行,我不知道哪个操作可能会出现这个问题。

请你帮我确定一下这个问题。

Capurot

1 个答案:

答案 0 :(得分:0)

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

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

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