from tkinter import *
import tkinter as tk
class Paint():
def __init__(self):
self.window=Tk()
self.sizex=500
self.sizey=500
self.canvas = Canvas(self.window, width=self.sizex, height=self.sizey, bg="white")
self.canvas.pack()
self.img = PhotoImage(width=self.sizex, height=self.sizey)
self.canvas.create_image((self.sizex, self.sizey), image=self.img, state="normal")
self.canvas.bind("<Button-1>",self.color_in)
def color_in(self, event):
self.img.put("black", (event.x, event.y))
paint=Paint()
mainloop()
在上面的代码中,我可以打开一个空白的白色窗口,但是当我单击屏幕上的任意位置时,没有任何变化。如何获取更新窗口?
答案 0 :(得分:0)
事物的结合:
您应该只导入一次Tkinter。如果将其导入为“ tk”,您的代码将更易于理解。
如果为不同的小部件设置不同的颜色,将很容易查看它们是否在您想要的位置。
将图像放置在画布上时,将其放置在右下角的500、500位置。默认锚点位于图像的中心。如Bryan所指出的,这导致您只能看到图像的左上1/4。
我将图像重新定位到(0,0),并指定了左上角('nw')作为锚点。画布highlightthickness=0
也会从画布中删除2像素的高光边框。图片state='normal'
是默认图片。
最后,我将图像上的标记做得更大一些,以便于查看。我将通话调整为mainloop()
图像现在处于正确位置,因此会自动更新。
import tkinter as tk
class Paint():
def __init__(self):
self.window = tk.Tk()
self.sizex = 500
self.sizey = 500
self.canvas = tk.Canvas(self.window, width=self.sizex,
height=self.sizey, highlightthickness=0)
# Set canvas background color so you can see it
self.canvas.config(bg="thistle")
self.canvas.pack()
self.img = tk.PhotoImage(width=self.sizex, height=self.sizey)
self.canvas.create_image((0,0), image=self.img, state="normal",
anchor='nw')
# Set image color so you can see it
self.img.put('khaki',to=(0, 0, self.sizex, self.sizey))
self.canvas.bind("<Button-1>",self.color_in)
def color_in(self, event):
# Paint a 2x2 square at the mouse position on image
x, y = event.x, event.y
self.img.put("black", to=(x-2, y-2, x+2, y+2))
paint = Paint()
paint.window.mainloop()