我正在尝试实现代码的放大和缩小,但是我正在寻找如何在放大和缩小时缩放文本和行,还试图设置鼠标滚轮的最小值和最大值。
import tkinter as tk
from tkinter import *
import tkinter.font as tkFont
root=tk.Tk()
root.title("example")
vscrollbar = tk.Scrollbar(root)
FONT_NAME = "Helvetica"
font_size = 18
font_size1 = 5
Width = 10
w = 2000
h = 1500
x = 450
y = 77
r=root.geometry("%dx%d+%d+%d" % (w, h, x, y))
canvas= tk.Canvas(root,background = "white")
f=tk.Frame(canvas)
hscroll = tk.Scrollbar(canvas,orient=HORIZONTAL,command=canvas.xview)
vscroll = tk.Scrollbar(canvas,orient=VERTICAL,command=canvas.yview)
canvas.configure(xscrollcommand=hscroll.set,yscrollcommand=vscroll.set)
canvas.configure(scrollregion=(0,0,1000,1000))
hscroll.pack(side=BOTTOM,fill=X)
vscroll.pack(side=RIGHT, fill=Y)
canvas.pack(side=LEFT,fill= 'both', anchor=W, expand= True)
def _create_circle(self, x, y, r, **kwargs):
return self.create_oval(x-r, y-r, x+r, y+r, **kwargs)
tk.Canvas.create_circle = _create_circle
line1 = canvas.create_line(300,200,1200,200, width = 10, fill= 'black')
line2 = canvas.create_line(300,240,1200,240, width = 10, fill= 'black')
line3 = canvas.create_circle(270, 218, 35, width = 5)
text1 = canvas.create_text(380, 202, font= (FONT_NAME,1), text = 'final' , fill = 'Green')
text2 = canvas.create_text(380, 198, font= (FONT_NAME,1), text = 'text 2', fill = 'red')
text3 = canvas.create_text(380, 240, font= (FONT_NAME,1), text = 'text 3', fill = 'Blue')
def zoomin(event):
global font_size
global font_size1
global Width
d = event.delta
if d < 0:
amt=0.9
else:
amt=1.1
canvas.scale(ALL,200, 200, amt, amt)
font_size *= amt
font_size1 *= amt
Width *= amt
canvas.itemconfigure(line1, width= float(Width))
canvas.itemconfigure(line2, width= float(Width))
canvas.itemconfigure(line3, width= float(Width))
canvas.itemconfigure(text1, font= (FONT_NAME, int(font_size1)))
canvas.itemconfigure(text2, font= (FONT_NAME, int(font_size1)))
canvas.itemconfigure(text3, font= (FONT_NAME, int(font_size1)))
canvas.bind('<MouseWheel>', zoomin)
canvas.pack()
def zoomout(event):
global font_size
global font_size1
global Width
d = event.delta
if d >0:
amt=1.1
else:
amt=0.7
canvas.scale(ALL, 200,200 , amt, amt)
font_size *= amt
font_size1 *= amt
Width *= amt
actual_width= Width-1
canvas.itemconfigure(line1, width= float(actual_width))
canvas.itemconfigure(line2, width= float(actual_width))
canvas.itemconfigure(line3, width= float(actual_width))
canvas.itemconfigure(text17, font= (FONT_NAME, int(font_size1)))
canvas.itemconfigure(text18, font= (FONT_NAME, int(font_size1)))
canvas.itemconfigure(text19, font= (FONT_NAME, int(font_size1)))
canvas.bind('<MouseWheel>', zoomout)
canvas.pack()
root.update()
canvas.config(scrollregion=canvas.bbox("all"))
root.mainloop()
这是我的代码,我试图在上面的代码中做同样的事情(缩放文本和行)
import tkinter as tk
import tkinter.font as tkFont
from tkinter import ttk
from tkinter import *
root = tk.Tk()
pressed = False
class Example(tk.Frame):
def _create_circle(self, x, y, r, **kwargs):
return self.create_oval(x-r, y-r, x+r, y+r, **kwargs)
tk.Canvas.create_circle = _create_circle
def __init__(self, root):
tk.Frame.__init__(self, root)
self.customFont = tkFont.Font(family="Helvetica", size=20)
root.title("Test")
self.canvas = Canvas(self, width=400, height=400, background="white")
self.xsb = tk.Scrollbar(self, orient="horizontal", command=self.canvas.xview)
self.ysb = tk.Scrollbar(self, orient="vertical", command=self.canvas.yview)
self.canvas.configure(yscrollcommand=self.ysb.set, xscrollcommand=self.xsb.set)
self.canvas.configure(scrollregion=(0,0,1000,1000))
self.xsb.grid(row=1, column=0, sticky="ew")
self.ysb.grid(row=0, column=1, sticky="ns")
self.canvas.grid(row=0, column=0, sticky="nsew")
self.grid_rowconfigure(0, weight=1)
self.grid_columnconfigure(0, weight=1)
self.canvas.create_line(300,160,1200,160, width = 10, fill= 'black')
self.canvas.create_line(300,200,1200,200, width = 10, fill= 'black')
self.canvas.create_circle(278, 180, 30, width = 10)
FONT_NAME = "Helvetica"
self.canvas.create_text(380, 157, font= (FONT_NAME,5), text = 'Text1', fill = 'Gray')
self.canvas.create_text(380, 159, font= (FONT_NAME,5), text = 'Text2', fill = 'Red')
self.canvas.create_text(380, 197, font= (FONT_NAME,5), text = 'Text3', fill = 'Gray')
self.canvas.bind("<ButtonPress-1>", self.move_start)
self.canvas.bind("<B1-Motion>", self.move_move)
self.canvas.bind("<ButtonPress-2>", self.pressed2)
self.canvas.bind("<Motion>", self.move_move2)
self.canvas.bind("<Button-4>", self.zoomerP)
self.canvas.bind("<Button-5>", self.zoomerM)
self.canvas.bind("<MouseWheel>",self.zoomer)
root.bind_all("<MouseWheel>",self.zoomer)
def move_start(self, event):
self.canvas.scan_mark(event.x, event.y)
def move_move(self, event):
self.canvas.scan_dragto(event.x, event.y, gain=1)
def pressed2(self, event):
global pressed
pressed = not pressed
self.canvas.scan_mark(event.x, event.y)
def move_move2(self, event):
if pressed:
self.canvas.scan_dragto(event.x, event.y, gain=1)
def zoomer(self,event):
if (event.delta > 0):
self.canvas.scale('all', event.x, event.y, 1.1, 1.1)
self.canvas.configure(scrollregion = self.canvas.bbox("all"))
elif (event.delta < 0):
self.canvas.scale('all', event.x, event.y, 0.9, 0.9)
self.canvas.configure(scrollregion = self.canvas.bbox("all"))
def zoomerP(self,event):
self.canvas.scale("all", event.x, event.y, 1.1, 1.1)
self.canvas.configure(scrollregion = self.canvas.bbox("all"))
def zoomerM(self,event):
self.canvas.scale("all", event.x, event.y, 0.9, 0.9)
self.canvas.configure(scrollregion = self.canvas.bbox("all"))
if __name__ == "__main__":
Example(root).pack(fill="both", expand=True)
root.mainloop()
我有3个问题:
如何实现从代码1到代码2相同的放大和缩小功能。
如何设置鼠标滚轮的最小值和最大值。
我遇到与UnicodeDecodeError相同的错误:'utf-8'编解码器无法解码位置0的字节0xff:两个代码中的无效起始字节。我该如何解决。
非常感谢您的帮助或建议。
谢谢。