【问题标题】:Tkinter modal window doesn't let main window to be maximizedTkinter 模态窗口不让主窗口最大化
【发布时间】:2017-01-18 14:47:07
【问题描述】:

我有一个奇怪的问题。为了了解真正发生的事情,我尝试了自己并用谷歌搜索,但没有结果。我简化了我的代码:

#mainw.py
import tkinter as tk
import modalw

class Main(tk. Frame) :
    def__init__(self, master) :
        tk.Frame.__init__(self, master) 
        self.master = master
        self.btn = tk.Button(master, text='modalwin', command=self.openwin)
        self.btn.pack()
    def openwin(self):
        mod = modalw.Modal()

#modalw.py
import tkinter as tk

class Modal(tk. Frame) :
    def__init__(self, master) :
        tk.Frame.__init__(self, master) 
        self.top = tk.TopLevel()
        #I'm not sure these 3 lines of code are true
        self.top.transient(master)
        self.top.grab_set()
        master.wait_window(self)
        self.lbl = tk.Label(self.top, text='Hello')
        self.lbl.pack()
        self.btn2 = tk.Button(master, text='change text', command=self.change)
        self.btn2.pack()
    def change(self):
        self.lbl.config(text='Good bye') 

问题是,在打开模态窗口后,我最小化(图标化)所有窗口(按 Ctrl+D),然后当我尝试最大化(去图标化)时,上面的两个窗口都没有最大化。有人可以解释一下吗?是我的错误还是我应该使用其他方式?

这是一个屏幕 gif:

信息:我的操作系统是 Windows 7,我检查了其他 PC。

【问题讨论】:

  • 您使用的是什么操作系统?我在 linux 中最小化并恢复了所有窗口,没有问题(使用 xfce 'show desktop' 快捷方式)。此外,您的代码中有一些拼写错误。您还在您的类中使用变量master,但他们的__init__ 方法没有参数master
  • Windows 11 上的同样问题

标签: python-3.x tkinter modal-dialog toplevel


【解决方案1】:

好吧,操作系统可能是您的问题,因为我在 Windows 上 - 这一切都很好,我可以随时最大化和最小化,而无需添加代码行。有人告诉我,Linux 也没有问题——所以我真的需要知道你在使用什么操作系统。但是现在你的操作系统正在阻止你。尝试找到一些代码来修复它。

【讨论】:

  • 按下modalwin后会打开另一个窗口,然后将所有打开的窗口最小化,然后它们还是最大化?
  • 在我的回答中添加了屏幕 gif
  • 你看到我的动图了吗,@JerryPlayz101?
猜你喜欢
  • 2013-04-05
  • 2016-11-27
  • 2021-12-31
  • 2011-08-24
  • 1970-01-01
  • 1970-01-01
  • 2022-11-20
  • 2017-11-24
  • 2021-03-14
相关资源
最近更新 更多