python - Tkinter:没有标题栏但可调整大小的窗口

标签 python resize tkinter tk-toolkit titlebar

我所知道的是如果我想创建一个没有标题栏的窗口,我可以写

    root = Tk()
    ........
    root.overrideredirect(1)

但我也希望窗口可以调整大小。有什么解决办法吗?

(仅供引用:我在 Windows 机器上工作,虽然我不确定它是否真的很重要。如果有独立于操作系统的解决方案,那将是完美的,但如果至少首先有一个针对 Windows 的解决方案,我很高兴。 )

最佳答案

问题是,窗口可调整大小的,但是当您打开overrideredirect 时,您会丢失任何类型的标题或边缘,您可以捕获这些标题或边缘来调整窗口大小.唯一的解决方案是自己实现调整大小。您可以添加自己的边框,或添加在鼠标靠近边缘时起作用的鼠标绑定(bind)。

这个答案展示了如何移动这样一个窗口:Python/Tkinter: Mouse drag a window without borders, eg. overridedirect(1)

这是一个说明调整大小的简短示例。它几乎没有在 OSX 上进行过测试,但应该可以在任何平台上运行。它使用 python2,尽管它应该仅通过更改 import 语句就可以与 python3 一起使用。

import Tkinter as tk
import ttk

class Example(tk.Tk):
    def __init__(self):
        tk.Tk.__init__(self)
        self.floater = FloatingWindow(self)

class FloatingWindow(tk.Toplevel):
    def __init__(self, *args, **kwargs):
        tk.Toplevel.__init__(self, *args, **kwargs)
        self.overrideredirect(True)
        self.wm_geometry("400x400")

        self.label = tk.Label(self, text="Grab the lower-right corner to resize")
        self.label.pack(side="top", fill="both", expand=True)

        self.grip = ttk.Sizegrip(self)
        self.grip.place(relx=1.0, rely=1.0, anchor="se")
        self.grip.lift(self.label)
        self.grip.bind("<B1-Motion>", self.OnMotion)


    def OnMotion(self, event):
        x1 = self.winfo_pointerx()
        y1 = self.winfo_pointery()
        x0 = self.winfo_rootx()
        y0 = self.winfo_rooty()
        self.geometry("%sx%s" % ((x1-x0),(y1-y0)))
        return

app=Example()
app.mainloop()

关于python - Tkinter:没有标题栏但可调整大小的窗口,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22421888/

相关文章:

jquery - 每次内容更改时使用 iFrame 内容更新 fancybox 的大小

python - 单个选项卡中的多个框架 ttk.Notebook

css - 响应式 CSS - 如何 'dynamically' 将 div 与带有填充/边距的父宽度对齐?

python - 你如何终止/中断/中止 Python 控制台/sys.stdin readline()?

python - Tkinter:持续时间不确定的 ProgressBar

python - 如何使用petl转换表中的值

python - 您如何在 wsl 上的 python3.8 中修复 tkinter?

python - 组合步骤

Python:__import__ 在 REPL 中有效,但在脚本中无效

java - 通过 JSpinner 动态调整 JTable 的大小