Tkinter 使用python而不使用python的代码

Tkinter 使用python而不使用python的代码,tkinter,pythonw,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 =

我正在写一个脚本,我希望它在后台运行,每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的使用不同,python.exe的行为完全符合我的要求,每隔6小时,就会弹出一个窗口,其中会打印“func”的输出) 很抱歉代码太多,但我听说有些操作在没有控制台的情况下无法运行,我不知道哪个操作会出现此问题

你能帮我找出这个问题吗


Capurot

我不知道为什么您的代码“不工作”,但我不知道您的意思。然而,您在代码中肯定做了一些非常错误的事情,这会阻止它在任何情况下工作。我发现很难相信,无论你如何运行它,它都能正常工作

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


Tkinter设计为以特定方式使用,即创建
Tk
的单个实例,并准确调用
mainloop
。除非你深入了解Tkinter的工作原理,否则任何其他东西都会给你带来意想不到的行为。

什么是“不工作”呢?你有错误吗?它真的工作了吗,只是没有按您认为应该的方式工作?您是否尝试过转到控制台并键入“pythonw my_script.py”?这样做可能会显示一些错误。好的,我刚刚做了,结果很有趣,如果我键入pythonw my_script.py,它只会打开一个包含函数输出的窗口一次,然后就不会像关闭控制台一样重复。但当我键入pythonw my_script.pyw时,它的工作方式与我想要的完全一样。每次设定的时间窗口都会弹出,当我关闭窗口时,计时器会重置。出于某种原因,当我试图通过双击来执行它时,即使我使用了sur,我使用了与控制台中的pythonw.exe相同的路径,但它不起作用。因此,我尝试了不同的方法,使脚本与pythonw一起工作的唯一方法是执行C://filepath/pythonw.exe C://filepath/my_script.pyw。我对python相当陌生,甚至比python更新特金特(今天发现的)。我的意思是,我很清楚,基本上什么都不做是做事情的最佳方式,但是,无限循环不是一种真正的方式来循环脚本evrey 6小时来做完全相同的事情,如果我不在我的办公桌上,也不打开多个窗口,因为循环只能在我关闭窗口时继续?任何建议显然都是非常受欢迎的。我一定会编辑原稿,精确解释“如何”不起作用,谢谢