Как получить простое приложение для рисования, использующее библиотеку Tkinter в python для отображения результатов на экране? - PullRequest
0 голосов
/ 31 августа 2018
 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 голосов
/ 01 сентября 2018

Пара вещей:

Вы должны импортировать Tkinter только один раз. Если вы импортируете его как "tk", ваш код будет легче понять.

Если вы установите разные цвета для разных виджетов, будет легко увидеть, находятся ли они там, где вы хотите их видеть.

Когда вы помещаете изображение на холст, вы помещаете его в положение 500, 500, которое находится в правом нижнем углу. Якорь по умолчанию находится в центре изображения. Это приводит к тому, что вы видите только верхнюю левую 1/4 изображения, как указывает Брайан.

Я изменил положение изображения на (0,0) и назначил верхний левый угол ('nw') в качестве якоря. Также canvas 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()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...