我正在使用TKInter创建一个显示一些信息(例如通知)的窗口。单击主应用程序的“查看详细信息”按钮时,窗口应显示。
这是我正在谈论的窗口的代码。单击上述按钮时,将调用Categories()方法。
from tkinter import *
from tkinter import ttk
def Categories():
roots = Tk()
roots.minsize(600, 600)
roots.title("Category Details")
labelFrameCategory = ttk.LabelFrame(roots,text="Financial")
labelFrameCategory.configure()
labelFrameCategory.grid(column=0 ,row=0, pady=10, padx = 30 , sticky = W)
labelClass = Label(labelFrameCategory, text="Documents related to finance")
labelClass.grid(column=0, row=1)
labelClass.config(font=("Courier", 15))
roots.resizable(False, False)
roots.mainloop()
我遇到的问题是每次我按下按钮时,都会创建一个新窗口,但当前窗口保持打开状态。因此,如果单击10次,它将打开10个类似的窗口。但是我希望它仅打开1个窗口,无论单击按钮多少次,都应该只有1个这样的窗口。该怎么做?
答案 0 :(得分:1)
好像您的函数Categories
是从另一个Tk
实例的按钮命令中调用的。通常,您要避免创建多个Tk
实例。
对于您的问题,有很多方法可以解决。一种方法是简单地在单击时禁用按钮命令,然后在销毁窗口时重新激活该命令:
import tkinter as tk
from tkinter import ttk
root = tk.Tk()
def new_window():
a.config(command="")
roots = tk.Toplevel() #Use Toplevel instead if you simply want another window
roots.minsize(600, 600)
roots.title("Category Details")
labelFrameCategory = ttk.LabelFrame(roots,text="Financial")
labelFrameCategory.configure()
labelFrameCategory.grid(column=0 ,row=0, pady=10, padx = 30 , sticky = tk.W)
labelClass = tk.Label(labelFrameCategory, text="Documents related to finance")
labelClass.grid(column=0, row=1)
labelClass.config(font=("Courier", 15))
roots.resizable(False, False)
def quit_window():
a.config(command=new_window)
roots.destroy()
roots.protocol("WM_DELETE_WINDOW",quit_window)
a = tk.Button(root,text="Click to open new win",command=new_window)
a.pack()
root.mainloop()
或者,您也可以设置window_open=True
之类的标志并检查该标志。
答案 1 :(得分:0)
而不是禁用按钮
为什么不使用顶层的属性名称?
这将允许您使用顶级实例。
尝试下面的代码。
mService.mSettings.onDefaultRuntimePermissionsGrantedLPr(userId);