Python Tkinter窗口背景/画布颜色不变 [英] Python tkinter window background/canvas not changing colour

查看:684
本文介绍了Python Tkinter窗口背景/画布颜色不变的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在编写绘图程序,并且试图提供一个选项来更改画布的背景颜色,但是由于某种原因,它不起作用。没有错误消息,我也不知道为什么它不起作用,因为我使用了几乎相同的代码来更改线条颜色。

I am coding a drawing program and I am trying to make an option to change the canvas background colour but for some reason it doesn't work. There is no error message and I have no idea why it doesn't work as I used pretty much the same code for changing the line colour.

PS我对python很陌生。

P.S. I am very new to python.

代码:

from tkinter import *

# canvas specifications/variables
canvas_height = 400
canvas_width = 600
p1_canvas_colour = "white"
p1_canvas_colour_number = 1

#p1 (what you draw with) specifications/variables
p1_x = canvas_width/2
p1_y = canvas_height
p1_colour = "black"
p1_colour_change = 1
line_width = 1
line_length = 1

#p1 controls
def p1_move_N(event):
    global p1_y
    canvas.create_line(p1_x, p1_y, p1_x, (p1_y-line_length), width=line_width, fill=p1_colour)
    p1_y = p1_y - line_length

def p1_move_S(event):
    global p1_y
    canvas.create_line(p1_x, p1_y, p1_x, (p1_y+line_length), width=line_width, fill=p1_colour)
    p1_y = p1_y + line_length

def p1_move_E(event):
    global p1_x
    canvas.create_line(p1_x, p1_y, (p1_x+line_length), p1_y, width=line_width, fill=p1_colour)
    p1_x = p1_x + line_length

def p1_move_W(event):
    global p1_x
    canvas.create_line(p1_x, p1_y, (p1_x-line_length), p1_y, width=line_width, fill=p1_colour)
    p1_x = p1_x - line_length

def erase_all(event):
    canvas.delete(ALL)

#the p1 colour change
def p1_line_colour_change(event):
    global p1_colour
    global p1_colour_change
    p1_colour_change += 1
    if p1_colour_change == 1:
        p1_colour = ("black")
    if p1_colour_change == 2:
        p1_colour = ("white")
    if p1_colour_change == 3:
        p1_colour = ("red")
    if p1_colour_change == 4:
        p1_colour = ("orange")
    if p1_colour_change == 5:
        p1_colour = ("yellow")
    if p1_colour_change == 6:
        p1_colour = ("green")
    if p1_colour_change == 7:
        p1_colour = ("blue")
    if p1_colour_change == 8:
        p1_colour = ("purple")
    if p1_colour_change == 9:
        p1_colour = ("pink")
    if p1_colour_change == 10:
        p1_colour = ("brown")
    if p1_colour_change == 11:
        p1_colour_change = 1
        p1_colour = ("black")
#the canvas colour change
def p1_canvas_colour_change(event):
    global p1_canvas_colour
    global p1_canvas_colour_number
    p1_canvas_colour_number += 1
    if p1_canvas_colour_number == 1:
        p1_canvas_colour = ("white")
    if p1_canvas_colour_number == 2:
        p1_canvas_colour = ("black")
    if p1_canvas_colour_number == 3:
        p1_canvas_colour = ("red")
    if p1_canvas_colour_number == 4:
        p1_canvas_colour = ("orange")
    if p1_canvas_colour_number == 5:
        p1_canvas_colour = ("yellow")
    if p1_canvas_colour_number == 6:
        p1_canvas_colour = ("green")
    if p1_canvas_colour_number == 7:
        p1_canvas_colour = ("blue")
    if p1_canvas_colour_number == 8:
        p1_canvas_colour = ("purple")
    if p1_canvas_colour_number == 9:
        p1_canvas_colour = ("pink")
    if p1_canvas_colour_number == 10:
        p1_canvas_colour = ("brown")
    if p1_canvas_colour_number == 11:
        p1_canvas_colour_number = 1
        p1_canvas_colour = ("white")
#the window/canvas
window = Tk()
window.title("Drawing")
canvas = Canvas(bg=p1_canvas_colour, height=canvas_height, width=canvas_width, highlightthickness=0)
canvas.pack()

#binding the functions to keys
window.bind("<Up>", p1_move_N)
window.bind("<Down>", p1_move_S)
window.bind("<Left>", p1_move_W)
window.bind("<Right>", p1_move_E)
window.bind("<BackSpace>", erase_all)
window.bind("<KP_Enter>", p1_line_colour_change)
window.bind("<Shift_R>", p1_canvas_colour_change)

window.mainloop()


推荐答案

您需要重新配置画布以应用更改,
在 p1_canvas_colour_change方法的末尾添加以下行:

you need to reconfigure your canvas in order to apply the change, add the following line at the end of your "p1_canvas_colour_change" method:

canvas.configure(background=p1_canvas_colour)

这篇关于Python Tkinter窗口背景/画布颜色不变的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆