如何使用python中的Tkinter库获取简单的绘画应用程序以在屏幕上显示结果?

时间:2018-08-31 03:46:27

标签: python tkinter pixel

 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()

在上面的代码中,我可以打开一个空白的白色窗口,但是当我单击屏幕上的任意位置时,没有任何变化。如何获取更新窗口?

1 个答案:

答案 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()