【问题标题】:Zoom in and out function in PythonPython中的放大和缩小功能
【发布时间】:2018-07-18 02:04:25
【问题描述】:

我正在尝试在 python 中使用放大、缩小功能。我之前曾尝试使用该功能放大海龟、画布等中的线条,但似乎没有任何效果,而不是缩放,代码要么增加或减少线条的长度。我想放大该行以在该行上添加文本,以便当用户放大该行时,他/她可以看到文本。这是我要更改的代码。

from tkinter import *
root = Tk()
Label(root).pack()
canvas = Canvas(root, width=400, height=400)
canvas.pack(fill=BOTH, expand=1)
widget = Button(None, text='zoomin-out')
widget.pack()
canvas.create_line(175,175,225,225)

def zoomin(event):
    d = event.delta
    if d < 0:
       amt=0.9
    else:
       amt=1.1
    canvas.scale(ALL, 200,200, amt, amt)
widget.bind('<Button-1>', zoomin)
def zoomout(event):
    d = event.delta
    if d >0:
       amt=1.1
    else:
       amt=0.7
    canvas.scale(ALL, 200,200 , amt, amt)
widget.bind('<Double-1>', zoomout)
widget.mainloop()
root.mainloop()

【问题讨论】:

  • 我相信event.delta 只会对鼠标滚轮事件有意义,而不是您在此处绑定的点击事件。除了增加或减少它的长度之外,你期望缩放一条线做什么?如果您希望在放大时线条变粗,您必须自己实现 - canvas.scale() 仅调整坐标,而不调整任何其他画布项目属性。
  • 当你放大一条线时,它自然会变长。
  • 我想平行增加宽度。宽度的增加将允许用户在单击放大按钮时看到放置在圆圈中的文本

标签: python python-3.x tkinter


【解决方案1】:

有两个问题。首先,当您将Button-1Double-1 事件添加到您的Button 小部件时,双击会触发这两个事件。它们最终会相互抵消,因此只有单击才能按预期工作。

其次,正如我在this SO answer 中指出的那样,某些元素(例如文本)不会缩放,它们将保持固定。您需要手动缩放字体以模拟文本缩放。

以下是您的代码按照上述内容的返工。而不是有问题的单击和双击,我已经对其进行了更改,以便在按钮上的左键和右键单击导致画布放大或缩小:

from tkinter import *

EXAMPLE_TEXT = "Left or Right click button to zoom in/out"
FONT_NAME = "Helvetica"
font_size = 12

def zoom(amount):
    global font_size

    canvas.scale(ALL, 200, 200, amount, amount)

    font_size *= amount
    canvas.itemconfigure(text_item, font=(FONT_NAME, int(font_size)))

root = Tk()

canvas = Canvas(root, width=400, height=400)
canvas.pack(fill=BOTH, expand=1)

text_item = canvas.create_text(200, 200, font=(FONT_NAME, font_size), text=EXAMPLE_TEXT)

canvas.create_oval(50, 50, 350, 350)

widget = Button(root, text='zoom in/out')
widget.pack()

widget.bind('<Button-1>', lambda e: zoom(1.1))
widget.bind('<Button-2>', lambda e: zoom(0.7))

root.mainloop()

如果您注释掉以canvas.itemconfigure(...) 开头的行,您会看到圆圈继续放大和缩小,但文本保持固定大小。

【讨论】:

  • 此代码仅适用于放大,您也可以分享当我们单击放大/按钮时如何增加圆圈的宽度
  • 我想让用户看到我在圆圈上添加的文字,当用户放大圆圈时可见。
  • @Siri,此代码放大和缩小。一个由鼠标左键激活,另一个由鼠标右键激活。如果您没有鼠标右键,请尝试将 与鼠标左键结合使用。或者,只需将按钮绑定更改为适合您的东西(只是不要单击和双击同一个按钮!)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-05-22
  • 2023-04-04
  • 2016-05-25
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多