【问题标题】: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()。这使它落后于顶层。