首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Tkinter --如何改进"grab_set()“方法行为?

Tkinter --如何改进"grab_set()“方法行为?
EN

Stack Overflow用户
提问于 2020-06-16 21:04:47
回答 1查看 771关注 0票数 1

我编写了一个简单的代码,其中我们有一个主窗口和两个按钮。第一个窗口打开一个新窗口,第二个窗口打开一个消息框。

当我打开消息框窗口时,我不能以任何方式与主窗口进行字母交互,如果我点击它,系统铃声就会播放,消息框就会闪烁。我想复制另一个窗口的同样的行为,但如何复制?当我使用它时,由于grab_set()方法,我不能与主窗口交互,但是在这种情况下,没有播放系统钟,没有闪存样式出现,毕竟我仍然可以通过标题栏移动主窗口,我不喜欢它。如何复制在新窗口中的消息框中看到的相同行为?

代码语言:javascript
运行
复制
from tkinter import *
from tkinter import ttk, messagebox

class MainWindow:   
    def __init__(self):
        self.parent=Tk()
        self.parent.title("Main Window")
        self.parent.configure(background="#f0f0f0")
        self.parent.geometry("300x200+360+200")

        self.NewWindowButton=ttk.Button(self.parent, text="Open the new Window", command=lambda: NewWindow(self.parent))
        self.MsgBoxButton=ttk.Button(self.parent, text="Open a Message Box", command=lambda: messagebox.showerror("Error", "Error"))        
        self.NewWindowButton.pack()
        self.MsgBoxButton.pack()

        self.parent.mainloop()

class NewWindow:   
    def __init__(self, parent):
        self.window, self.parent=Toplevel(parent), parent
        self.window.title("New Window")
        self.window.configure(background="#f0f0f0")
        self.window.geometry("300x200+360+200")
        self.window.resizable (width=False, height=False)
        self.window.grab_set()


def main():
    app=MainWindow()

if __name__=="__main__":
    main()

下面您可以看到我在Windows 10中的软件行为(这是一个gif映像):

http://www.imagebam.com/image/ac4a4a1347175889

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-06-17 01:53:55

在Windows中,您可以尝试:

禁用父窗口的closed/destroyed

  • call

  • attributes('-disabled', 1)

  • 将toplevel设置为父

  • 调用wait_window()的临时窗口,以等待toplevel

  • attributes('-disabled', 0)启用父窗口H 211F 212

代码语言:javascript
运行
复制
class NewWindow:   
    def __init__(self, parent):
        try:
            parent.attributes('-disabled', 1) # disable the parent
            self.window, self.parent = Toplevel(parent), parent
            self.window.title("New Window")
            self.window.configure(background="#f0f0f0")
            self.window.geometry("300x200+360+200")
            self.window.resizable (width=False, height=False)
            self.window.transient(parent)
            self.window.grab_set()
            parent.wait_window(self.window) # wait for current window to close
        finally:
            # enable the parent
            parent.attributes('-disabled', 0)
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62417582

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档