tkinter窗口不显示在带有.after()语句的程序中

cxfofazt  于 2021-08-25  发布在  Java
关注(0)|答案(1)|浏览(349)

我正在尝试做一个自我更新脚本来显示一个表,其中包含一些我从一些网站上抓取的数据。数据被刮取、加载、格式化,然后在tkinter中以表格格式显示。但是,当我使用root.after()进行自我刷新时,窗口根本不会出现。我知道程序正在运行,因为我在终端中看到了输出,但没有出现tkwindow。在()的行为之后,我有什么遗漏的吗?当有很多线路时,它不会运行吗?
我尝试只注解.after()部分,脚本将完全执行,然后显示窗口。我也从未输入else语句,这很好,但由于某些原因,即使只使用if语句,代码也无法工作。
下面是我使用的代码

root = Tk()
root.geometry("1080x1080")

def calculations():

    Scraping_and_writing_in_files()

    final_result = File_format_pandas()

    if len(final_result.index) == 0:
        label = Label(root, text = "There are no hits")
        label.pack()
        print("I am in the if statement - no hits found")
    else:
        print("I am in the else statement") # I was never in the Else statement so you can ignore the code below 
        #Create a main frame 

        main_frame = Frame(root)
        main_frame.pack(fill=BOTH, expand=1)

        #Create a canvas 

        my_canvas = Canvas(main_frame)
        my_canvas.pack(side=LEFT, fill=BOTH, expand=1)

        #Add scrollbar 

        my_scrollbar = ttk.Scrollbar(main_frame, orient=VERTICAL, command=my_canvas.yview)
        my_scrollbar.pack(side=RIGHT, fill=Y)

        #Configure scrollbar

        my_canvas.configure(yscrollcommand=my_scrollbar.set)
        my_canvas.bind('<Configure>',lambda e: my_canvas.configure(scrollregion = my_canvas.bbox("all")))

        def _on_mouse_wheel(event):
            my_canvas.yview_scroll(-1 * int((event.delta / 120)), "units")

        my_canvas.bind_all("<MouseWheel>", _on_mouse_wheel)

        #Create another frame in the canvas

        second_frame = Frame(my_canvas)

        #Add that new frame to a window in the canvas 

        my_canvas.create_window((0,0), window=second_frame, anchor = "nw")

        initial_entries1 = Entry(second_frame,font=("Helvetica", 12),bd=0,width=30)
        initial_entries1.insert(0, "Match Name")
        initial_entries1.config(state = "readonly")
        initial_entries1.grid(row=0, column=0)

        initial_entries2 = Entry(second_frame,font=("Helvetica", 12),bd=0,width=30)
        initial_entries2.insert(0, "Result for T1")
        initial_entries2.config(state = "readonly")
        initial_entries2.grid(row=0, column=1)

        initial_entries3 = Entry(second_frame,font=("Helvetica", 12),bd=0,width=30)
        initial_entries3.insert(0, "Result for Draw")
        initial_entries3.config(state = "readonly")
        initial_entries3.grid(row=0, column=2)

        initial_entries3 = Entry(second_frame,font=("Helvetica", 12),bd=0,width=30)
        initial_entries3.insert(0, "Result for T2")
        initial_entries3.config(state = "readonly")
        initial_entries3.grid(row=0, column=3)

        for thing in range(len(final_result.index)):

            match_name = Entry(second_frame, font=("Helvetica", 10),bd=0,width=30)
            match_name.insert(0, final_result['Match name'].iloc[thing])
            match_name.config(state = "readonly")
            match_name.grid(row=thing+1, column=0)

            result_t1 = Entry(second_frame, font=("Helvetica", 10),bd=0,width=15)
            result_t1.insert(0, final_result['Difference Team 1 For'].iloc[thing])
            if float(final_result['Difference Team 1 For'].iloc[thing]) > 0:
                result_t1.config(state = "readonly")
            result_t1.grid(row=thing+1, column=1)

            result_t2 = Entry(second_frame, font=("helvetica", 10), bd=0, width=15)
            result_t2.insert(0, final_result['Difference Team 2 For'].iloc[thing])
            if float(final_result['Difference Team 2 For'].iloc[thing])>0:
                result_t2.config(state = "readonly")
            result_t2.grid(row=thing+1, column=3)

            result_draw = Entry(second_frame, font=("helvetica", 10), bd=0, width=15)
            result_draw.insert(0, final_result['Difference Draw For'].iloc[thing])
            if float(final_result['Difference Draw For'].iloc[thing]) > 0:
                result_draw.config(state = "readonly")
            result_draw.grid(row=thing+1, column=2)

        root.after(2000, main_frame.destroy())

        #     label1 = Label(second_frame, text="Google Hyperlink", fg="blue", cursor="hand2")
        #     label1.pack()
        #     label1.bind("<Button-1>", lambda e: callback("http://www.google.com"))

    root.after(1000, calculations())

calculations()
root.mainloop()
9udxz4iz

9udxz4iz1#

在after方法中不需要括号,因为它们会立即调用函数,并在延迟后使用它返回的任何内容作为回调。谢谢jasonharper和sujay。
root.after(1000,计算())=>应该是root.after(1000,计算)

相关问题