【问题标题】:How can I disable a tkinter frame upon pressing a button?如何在按下按钮时禁用 tkinter 框架?
【发布时间】:2019-11-24 15:22:00
【问题描述】:

对于我更大的应用程序,我有一个在右键单击时生成的 Tk 框架。我希望窗口的所有焦点都指向此框架(如果用户单击父级上的按钮则什么都不会发生),然后当框架被销毁时,我希望它恢复正常。我创建了一个最小的示例来演示我尝试做的事情,但它不起作用。

我只是希望在单击 Disable Outer 后禁用 Root 按钮(Say hi)。

import tkinter as tk

class app(tk.Frame):

    def __init__(self, parent,*args,**kwargs):
        tk.Frame.__init__(self, parent,*args,**kwargs)
        self.parent=parent

        toggler = tk.Button(self,text='DISABLE OUTER',command=self.toggleMain)
        toggler.pack(padx=20,pady=20)    

    def toggleMain(self):

        status= self.parent.grab_status()
        if not status:
            print('Outer Is Disabled (Hi Should not work)')
            self.parent.grab_set_global()
        else:
            print('Outer is Enabled (Hi should work)')
            self.parent.grab_release()

root = tk.Tk()

app = app(root,bg='red')
app.pack()


def SayHi():
    print('Hi There')

f=tk.Button(root,text='Say Hi',command=SayHi)
f.pack()

root.mainloop()

【问题讨论】:

    标签: python user-interface events tkinter frames


    【解决方案1】:

    我不确定您要做什么,但如果您只想禁用显示“Say Hi”的按钮,那就是禁用它。

    import tkinter as tk
    
    
    class app(tk.Frame):
    
        def __init__(self, parent,*args,**kwargs):
            tk.Frame.__init__(self, parent,*args,**kwargs)
            self.parent=parent
    
            toggler = tk.Button(self,text='DISABLE OUTER',command=self.toggleMain)
            toggler.pack(padx=20,pady=20)
    
        def toggleMain(self):
    
            status= self.parent.grab_status()
            if not status:
                print('Outer Is Disabled (Hi Should not work)')
                self.grab_set()
            else:
                print('Outer is Enabled (Hi should work)')
                self.grab_release()
    
    root = tk.Tk()
    
    app = app(root,bg='red')
    app.pack()
    
    
    def SayHi():
        print('Hi There')
    
    f=tk.Button(root,text='Say Hi',command=SayHi)
    f.pack()
    
    root.mainloop(
    

    【讨论】:

    • 这是一个最小的例子,在我的真实程序中,我有数百个不同的事件绑定。我不可能将它们全部解开并重新绑定它们。我需要用一种方法禁用所有这些。我已经阅读了文档,grab_set_global() 就是这样做的。但是,在我的示例中它不起作用。感谢您的评论
    • 你需要使用grab_set_global()吗?只使用grab_set() 怎么样
    • 我更新了上面的代码以使用grab_set,试试看它是否适合你。
    • 非常感谢,不知道为什么我没有看到。使用status= self.grab_status() 行,它可以完美运行。非常感谢!
    猜你喜欢
    • 1970-01-01
    • 2023-04-10
    • 1970-01-01
    • 2021-03-15
    • 2023-01-30
    • 2015-02-10
    • 2019-06-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多