【问题标题】:Stop a tkinter subwindow (from Topleve()) being resized停止调整大小的 tkinter 子窗口(来自 Topleve())
【发布时间】:2021-09-16 12:15:59
【问题描述】:

我知道如何阻止我的主 tkinter 窗口调整大小: self.mainWin.resizable(False,False)

但是,当我创建一个子窗口类时,我会这样做:

self.subWin = tk.Toplevel(parent.mainWin)
self.subWin.resizable(False,False)

这不会给出任何错误,但我仍然可以调整子窗口的大小。是否有停止调整从 Toplevel() 创建的子窗口大小的技巧?

【问题讨论】:

    标签: python tkinter resize toplevel


    【解决方案1】:

    让我感到困惑的是我有另一个程序,我从中复制了窗口代码,并且该程序的行为很好。这是新的,几乎逐字复制,但没有。这是“新”代码。 (我尝试了 lower() 的事情,但它没有工作,无论它没有出现在我编写的旧程序中它可以工作的地方,这让我摸不着头脑)。

    class HarmonyExplorerMainWindow:
        def __init__(self):
          
            #____________________________________________________________
            # ----------------------- Main Window -----------------------
            
            self.mainWin = tk.Tk()
            self.mainWin.title('Harmony Explorer  by Stuart Christmas')
            MainWidth = 1000
            MainHeight = 655
            
            self.mainWin.geometry(str(MainWidth)+'x'+str(MainHeight))   # width x height
            self.mainWin.resizable(False,False)
    
    << NEW SUB-WINDOW IN A DIFFERENT FILE ALTOGETHER >>:
    
    class CustomizeWindow():
        def __init__(self,parent):
                    
            #____________________________________________________________
            # ----------------------- Main window ----------------------- 
            
            CustomWin = tk.Toplevel(parent.mainWin)
            CustomWin.title('Customize Scale')
            CustomWin.geometry("485x238")
            CustomWin.resizable=(False,False)
    
    

    这段代码在我的旧(完全不同的)程序中工作正常,两个窗口都不能调整大小。但是在这个逐字副本中(除了窗口和变量名),第一个代码块中的主窗口不可调整大小(很好),但从较低代码创建的子窗口仍然是。快把我逼疯了!我也尝试过使用grab_set()focus_set(),但总是回顾工作代码并想知道有什么不同。窗口中的其他所有内容都可以正常工作,包括使用来自父级(parent.x 等)的变量,所以我知道我调用它很好......

    (编辑:我注意到我的第二类 def 以 () 结尾...我认为这是不对的(可能是另一个问题),但这并没有解决它...)

    【讨论】:

      【解决方案2】:

      尝试设置窗口的标题:mainWin.wm_title("main")subWin.wm_title("sub")。这将告诉你哪个窗口是哪个。当我运行你的代码时,顶层不可调整大小(所以它工作),但它也不是在顶层。根据您的完整代码是什么,可能问题在于顶层位于主窗口后面,并且两者混淆了。要解决此问题,您可以致电mainWin.lower()。这使它落后于顶层。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-03-24
        • 2011-05-18
        • 2013-07-10
        • 2019-01-14
        • 1970-01-01
        • 2018-03-01
        相关资源
        最近更新 更多