【问题标题】:How do I let my Tkinter-Canvas have a fixed width/height ratio when resizing the window调整窗口大小时如何让我的 Tkinter-Canvas 具有固定的宽度/高度比
【发布时间】:2022-01-14 04:05:56
【问题描述】:

我有以下棋盘:

而且我希望放置棋盘的画布始终保持正方形,无论我如何调整窗口大小,我们都非常感谢任何帮助!

【问题讨论】:

  • 这真的取决于它是如何创建并放入窗口的。请发帖minimal reproducible example
  • 您是否也希望以相同的纵横比调整画布大小?请注意,调整画布大小并不意味着其中的项目也被调整大小。
  • @acw1668 如果里面的项目保持不变就可以了,如果标签和列表框没有按比例放大也可以,我只需要调整大小时棋盘保持不变窗户,它看起来如何并不重要(如果窗户周围有空白来实现这一点,那很好)只要木板保持正方形
  • 那你为什么不保持画布的大小不变,不管窗口怎么调整?

标签: python python-3.x tkinter tkinter-canvas


【解决方案1】:

如果您在一个窗口中有多个项目并且想要约束一个小部件,这可能会变得复杂。正确答案取决于窗口中发生的其他情况以及您定义的调整大小行为。

一个简单的方法是确保画布位于不会调整大小的区域中。例如:

import tkinter as tk

root = tk.Tk()

root.grid_columnconfigure(0, weight=1)
root.grid_rowconfigure(1, weight=1)

canvas = tk.Canvas(root, width=400, height=400, bg="bisque")
canvas.grid(row=0, column=1, sticky="nsew")

root.mainloop()

您还可以使用wm_aspect 将整个窗口限制为特定的纵横比。这使您可以调整窗口大小,但整个窗口将保留特定的纵横比。

例如,要强制根窗口为正方形,您可以这样做:

root = tk.Tk()
root.wm_aspect(1, 1, 1, 1)

来自 tcl/tk 手册页(并翻译成 python 语法):

window.wm_aspect(?minNumer minDenom maxNumer maxDenom?) - 如果 minNumer, minDenom, maxNumer,和 maxDenom 都被指定,然后它们将被传递给窗口管理器,并且窗口管理器应该使用它们来强制执行窗口可接受的宽高比范围。窗口的纵横比(宽度/长度)将被限制在 minNumer/minDenommaxNumer/maxDenom 之间。如果 minNumer 等都指定为空字符串,则删除任何现有的纵横比限制。如果指定了 minNumer 等,则该命令返回一个空字符串。否则,它返回一个包含四个元素的元组,它们是 minNumerminDenommaxNumermaxDenom 的当前值em>(如果没有任何方面限制生效,则返回一个空字符串)。

【讨论】:

  • 我试过了,但遗憾的是它没有解决我的问题,我想要的是当我调整窗口大小时画布保持正方形,以便棋盘保持完整
【解决方案2】:

您的问题有很多解决方案。这是一个具有固定大小的grid 经理和Canvas。如果您想调整Canvas 的大小,您必须使用绑定到<Configure> 事件来保持其大小为正方形:

import tkinter as tk
from tkinter import ttk

root = tk.Tk()

b = ttk.Button(text='test')
b.grid(column=0, row=0, sticky='ew')
root.columnconfigure(0, weight=1)
root.rowconfigure(1, weight=1)
canvas = tk.Canvas(root, width=500, height=500, bg="bisque")
canvas.grid(row=0, column=1, rowspan=2, sticky='nw')

root.mainloop()

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-04-23
    • 2014-01-22
    • 1970-01-01
    • 2011-05-21
    • 1970-01-01
    • 1970-01-01
    • 2015-03-31
    • 1970-01-01
    相关资源
    最近更新 更多