Как изменить состояние холста - PullRequest
0 голосов
/ 18 февраля 2020

Мне было интересно, как я могу скрыть свой холст от пользователя, а затем заставить его появиться снова, когда я захочу. Я попытался использовать canvas.config (state = "disabled"), но он не скрывает этого. Когда я пытаюсь использовать canvas.config (state = "hidden"), он говорит, что я должен использовать обычный или отключенный. Вот код:

from tkinter import *
from tkinter import ttk

root = Tk()

def redCallback():
    labelRed = ttk.Label(frameTwo, text = "Red", background = "red")
    labelRed.grid(row = 1, column = 0, pady = 5, ipadx = 35, ipady = 5)                  
def orangeCallback():
    labelOrange = ttk.Label(frameTwo, text = "Orange", background = "orange")
    labelOrange.grid(row = 1, column = 1, pady = 5, ipadx = 25, ipady = 5)
def yellowCallback():
    labelYellow = ttk.Label(frameTwo, text = "Yellow", background = "yellow")
    labelYellow.grid(row = 1, column = 2, pady = 5, ipadx = 26, ipady = 5)
def greenCallback():
    labelGreen = ttk.Label(frameTwo, text = "Green", background = "green")
    labelGreen.grid(row = 1, column = 3, pady = 5, ipadx = 30, ipady = 5)
def blueCallback():
    labelBlue = ttk.Label(frameTwo, text = "Blue", background = "blue")
    labelBlue.grid(row = 1, column = 4, pady = 5, ipadx = 33, ipady = 5)

def return_press(event):
    labelCanvas = ttk.Label(frameThree, text = "Now draw on the canvas!")
    labelCanvas.pack()

def mouse_press(event):
    global prev
    print('type: {}'.format(event.type))
    print('widget: {}'.format(event.widget))
    print('num: {}'.format(event.num)) 
    print('x: {}'.format(event.x))
    print('y: {}'.format(event.y))
    print('x_root: {}'.format(event.x_root))
    print('y_root: {}\n'.format(event.y_root))
    prev = event

def draw(event):
    global prev
    canvas.create_line(prev.x, prev.y, event.x, event.y, width = 5)
    prev = event

frameOne = ttk.Frame(root)
frameOne.pack()

frameTwo = ttk.Frame(root)
frameTwo.pack()
frameThree = ttk.Frame(root)
frameThree.pack()

labelPallet = ttk.Label(frameOne, text = "Click the buttons below, and then tap ENTER")
labelPallet.pack()

buttonRed = ttk.Button(frameTwo, text = "Red", command = redCallback)
buttonRed.grid(row = 0, column = 0, ipadx = 10, ipady = 5)
buttonOrange = ttk.Button(frameTwo, text = "Orange", command = orangeCallback)
buttonOrange.grid(row = 0, column = 1, ipadx = 10, ipady = 5)
buttonYellow = ttk.Button(frameTwo, text = "Yellow", command = yellowCallback)
buttonYellow.grid(row = 0, column = 2, ipadx = 10, ipady = 5)
buttonGreen = ttk.Button(frameTwo, text = "Green", command = greenCallback)
buttonGreen.grid(row = 0, column = 3, ipadx = 10, ipady = 5)
buttonBlue = ttk.Button(frameTwo, text = "Blue", command = blueCallback)
buttonBlue.grid(row = 0, column = 4, ipadx = 10, ipady = 5)

canvas = Canvas(root, width = 640, height = 480, background = "white")
canvas.pack()

root.bind("<Return>", return_press)

canvas.bind('<ButtonPress>', mouse_press)
canvas.bind("<B1-Motion>", draw)

В настоящее время программа просто имеет кнопки, которые при нажатии будут создавать метки в этом цвете. Я хочу, чтобы холст был скрыт до тех пор, пока labelCanvas не будет напечатан.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...