Python Tkinter标签不显示在弹出窗口中

Python Tkinter标签不显示在弹出窗口中,python,tkinter,Python,Tkinter,我最近开始使用python编写代码,堆栈溢出似乎是一个来源,我可能遇到的所有错误都已经被其他人询问并回答了。这次我遇到了一个错误,没有找到答案 我编写了一个应用程序,利用tkinter的GUI。在这个应用程序的一部分,用户从主机上按下一个按钮,打开另一个窗口并输入数据。 之后,用户关闭弹出窗口,程序将处理数据。 在此弹出窗口中,条目小部件旁边的标签不会出现 我在谷歌上搜索了很多,并尝试: -调用更新。方法。 -已检查标签是否显示在大型机中 -重新启用了弹出窗口的大小调整 -将代码隔离在不同的文件

我最近开始使用python编写代码,堆栈溢出似乎是一个来源,我可能遇到的所有错误都已经被其他人询问并回答了。这次我遇到了一个错误,没有找到答案

我编写了一个应用程序,利用tkinter的GUI。在这个应用程序的一部分,用户从主机上按下一个按钮,打开另一个窗口并输入数据。 之后,用户关闭弹出窗口,程序将处理数据。 在此弹出窗口中,条目小部件旁边的标签不会出现

我在谷歌上搜索了很多,并尝试: -调用更新。方法。 -已检查标签是否显示在大型机中 -重新启用了弹出窗口的大小调整 -将代码隔离在不同的文件中,标签出现在这里

我的主窗口中似乎有什么东西阻止标签出现在弹出窗口中? 或者我忘了告诉程序做一些事情来主动显示标签

import tkinter as tk, sys
from tkinter import StringVar, Tk
from tkinter.filedialog import askopenfilename

root = tk.Tk()
root.title("title")
w = tk.Label(root, text="text")
w.pack()

# This is the code snippet that works isolated, but not in this context
def enter_deadline():
    det_window = tk.Tk()
    # Enter deadline
    shime_text =  StringVar()
    shime_text.set("〆切月日記入:")
    label_shime=tk.Label(det_window, textvariable=shime_text, height=6)
    label_shime.pack(side="left", padx = 20, pady=20)
    shime_val = StringVar(None)
    det_shime = tk.Entry(det_window,textvariable=shime_val, width=20)
    det_shime.pack(side="left", padx = 20, pady=20)

    def killme():
            det_window.destroy()
    det_button = tk.Button(det_window, text='スタート',command=killme).pack()
    det_window.mainloop()


# Make pop-up window for PO
def create_POW():
    try:
        Tk().withdraw()
        # show an "Open" dialog box and return the path
        po_filename = askopenfilename()
        po_file = open(po_filename, 'rb')
        enter_deadline()
    except Exception as e:
        print("ファイルエラー")
        print(e)
        sys.exit()

    # lots of repititive code for buttons
button3 = tk.Button(root, text='PO',command=create_POW).pack()

root.mainloop()
因为独立的代码片段做了它应该做的事情,所以我似乎还遗漏了一些东西

提前谢谢。
Andreas

主要问题是您创建了多个
Tk()
实例(单击
按钮3
时创建了一个新实例)。因此,将
det_window
更改为
Toplevel
的实例,并删除调用
det_window.mainloop()
内部
enter_deadline()
函数。还要删除函数中的语句
Tk().draw()

以下是经过上述修改的代码:

import tkinter as tk, sys
from tkinter import StringVar, Tk
from tkinter.filedialog import askopenfilename

root = tk.Tk()
root.title("title")
w = tk.Label(root, text="text")
w.pack()

# This is the code snippet that works isolated, but not in this context
def enter_deadline():
    det_window = tk.Toplevel()  # changed from tk.Tk()
    # Enter deadline
    shime_text =  StringVar()
    shime_text.set("〆切月日記入:")
    label_shime=tk.Label(det_window, textvariable=shime_text, height=6)
    label_shime.pack(side="left", padx = 20, pady=20)
    shime_val = StringVar(None)
    det_shime = tk.Entry(det_window,textvariable=shime_val, width=20)
    det_shime.pack(side="left", padx = 20, pady=20)

    def killme():
            det_window.destroy()
    tk.Button(det_window, text='スタート',command=killme).pack()
    #det_window.mainloop()


# Make pop-up window for PO
def create_POW():
    try:
        #Tk().withdraw()
        # show an "Open" dialog box and return the path
        po_filename = askopenfilename()
        po_file = open(po_filename, 'rb')
        enter_deadline()
    except Exception as e:
        print("ファイルエラー")
        print(e)
        sys.exit()

    # lots of repititive code for buttons
button3 = tk.Button(root, text='PO',command=create_POW).pack()

root.mainloop()

您使用的后端是什么?通常我使用Thonny(它使用Python 3.7)。我尝试在空闲状态(也是Python 3.7)下运行脚本,结果相同。我用的是Windows10,64位。太好了。这帮了大忙。现在一切都按计划进行。谢谢!