Python tkinter 如何放大小部件

Python tkinter how to zoom in widgets

我的代码:

import tkinter as tk

root = tk.Tk()

for i in range(50):
    for j in range(50):
        tk.Button(height=1, width=2, bg='Blue').grid(row=j, column=i)

root.mainloop()

即使将 window 最大化,我也看不到屏幕上的所有按钮。所以我想添加一个缩小选项(所有的小部件都会变小),这样我就可以看到所有的小部件。我该怎么做?

根据我从你的问题中了解到的情况,我认为你希望 window 在 tkinter 中可以调整大小。

为了允许用户调整 window 的大小,我们使用可调整大小的函数 -:

root.resizable(height = True, width = True)

在这种情况下,两个参数是高度和宽度,如果您只想让小部件垂直调整大小或只希望它水平调整大小,这有助于您自定义。

你添加了这个函数的代码应该是这样的-:

import tkinter as tk

root = tk.Tk()
root.resizable(True, True) #Assuming you want both vertically and horizontally resizable window.

for i in range(50):
    for j in range(50):
        tk.Button(height=1, width=2, bg='Blue').grid(row=j, column=i)

root.mainloop()

希望这能解决您的问题。 我也希望你在这个持续的大流行时期是安全的。

Example code:

import tkinter as tk

root = tk.Tk()
root.state('zoomed')
widgets_to_zoom_list = []
DEFAULT_SIZE = 50


def zoom(widget):
    for every_widget in widgets_to_zoom_list:
        every_widget.config(width=widget.get(), height=widget.get())


def main():
    canvas = tk.Canvas(root)
    frame = tk.Frame(canvas)
    zoom_scale = tk.Scale(root, orient='vertical', from_=1, to=100)
    zoom_scale.config(command=lambda args: zoom(zoom_scale))

    zoom_scale.set(DEFAULT_SIZE)

    pixel = tk.PhotoImage(width=1, height=1)
    for i in range(50):
        btn = tk.Button(frame, text=str(i + 1), bg='Blue', image=pixel, width=DEFAULT_SIZE, height=DEFAULT_SIZE, compound="c")
        btn.grid(row=0, column=i)
        widgets_to_zoom_list.append(btn)

    canvas.create_window(0, 0, anchor='nw', window=frame)
    # make sure everything is displayed before configuring the scroll region
    canvas.update_idletasks()

    canvas.configure(scrollregion=canvas.bbox('all'))
    canvas.pack(fill='both', side='left', expand=True)
    zoom_scale.pack(fill='y', side='right')
    root.mainloop()


if __name__ == '__main__':
    main()